Tyvj 模擬賽 運

2022-02-27 07:00:13 字數 2370 閱讀 1438

zhx和妹子們玩數數遊戲。

僅包含4或7的數被稱為幸運數。 

乙個序列的子串行被定義為從序列中刪去若干個數,剩下的數組成的新序列。兩個子串行被定義為不同的當且僅當其中的元素在原始序列中的下標的集合不相等。對於乙個長度為n的序列,共有2n個不同的子串行。(包含乙個空序列)。 

乙個子串行被稱為不幸運的,當且僅當其中不包含兩個相同的幸運數。 

對於乙個給定序列,求其中長度恰好為k的不幸運子串行的個數,答案mod 109+7輸出。

第一行兩個正整數n,k,表示原始序列的長度和題目中的k。 

接下來一行n個整數ai,表示序列中第i個元素的值。

僅乙個數,表示不幸運子串行的個數。(mod 10^9+7)

3 2 

1 1 1

4 2 

4 7 4 73 4

對於樣例1,每個長度為2的子串行都是符合條件的。 

對於樣例2,4個不幸運子串行元素下標分別為:, , , 。注意下標集對應的子串行不是「不幸運」的,因為它包含兩個相同的幸運數4.

對於50%的資料,1≤n≤16。 

對於70%的資料,1≤n≤1000,ai≤10000。 

對於100%的資料,1≤n≤100000,k≤n,1≤ai≤10^9。

此題比較水但是又略鬼畜...

首先我們可以發現乙個幸運數一股子0/1串的味道...所以很顯然對於 $10^9$ 之內的資料, 幸運數的數量只有 $1 \times 10^3$ 左右個. 所以我們第一可以選擇打個表上去(重度懶癌患者表示還是直接打個陣列表上去w), 第二可以選擇dfs預處理一下, 然後將這些幸運數離散化. 離散化之後進行計數, 計算每個幸運數出現的次數 $cnt_i$ , 同時處理出非幸運數的個數 $d$ . 處理到這裡我們已經成功將輸入分成了兩類, 然後需要分別來處理.

對於非幸運數隨便瞎**挑夠數就行, 然後非幸運數的部分就變成了乙個組合問題. 我們枚舉子序列中幸運數的個數 $i$ , 則非幸運數的個數為 $k-i$ , 與對應的幸運數部分相乘即可求得答案的一部分. 然後一直列舉 $i$ 即可得出答案. 公式如下:

\[ans=\sum_^k \times f_i}\]

其中 $f_i$ 為從所有幸運數中取出 $i$ 個的方案數. 由於如果要保證子串行的非幸運性(???)的話, 幸運數的個數不能達到 $2$ , 也就是說每種要麼取乙個要麼就不取, 然後我們似乎聞到了一股子0/1揹包的味道所以我們可以將它轉化成 $dp$ 來求. 對於 $c^d_$ , 因為 $d$ 是固定的, 所以我們可以遞推出乙個組合數表出來. 當 $f_i$ 和 $\binom$ 兩張表打好之後就可以算總答案辣w

參考**

noip模擬賽 運

問題背景 zhx 和妹子們玩數數遊戲。問題描述 僅包含 4 或 7 的數被稱為幸運數。乙個序列的子串行被定義為從序列中刪去若干個數,剩下的數組成的新序列。兩個子串行被定義為不同的當且僅當其中的元素在原始序列中的下標的集合不 相等。對於乙個長度為 n的序列,共有 2 n個不同的子串行。包含乙個空序列 ...

《省賽模擬賽補》

c題 比賽的時候已經想到了統計最底層的每個序列的出現次數,但是一開始想的是建圖之後dfs處理,但是發現很難處理出來。其實正確的思路是拓撲排序去處理次數。我們在最後建圖完成之後,倒著從n回去拓撲即可。但是這裡有個坑點,就是一開始統計入度可能是不正確的。例如 3 1 2 4 1 2 3是1,2的父節點,...

日常模擬賽

none 100 100 10 210 不太會做.好像.是個sb題.嗯.div3t1難度 include include define int long long define gc getchar define pc putchar inline int read void print int x...