有數字 1∼∼9,每個數字的個數分別為 cnt1,cnt2,cnt3,...,cnt9。計算出「滿意的集合「的個數。
"滿意的集合" 定義:選出的數存在一種排列方式,其拼接起來後表示的十進位制整數,能被 3整除,例如集合 (包含了 2 個數字 3,1 個數字 6 ),可以有排列 代表十進位制下的整數 633,能被 3 整除。鏈
兩個集合相同,當且僅當集合元素個數相同,且排序後對應數字相同,例如 和 是同樣的集合。 空集合看作 0 ,是合法的,答案對 1e9+7取模。
乙個十進位制數每一位累加是 3 的倍數,那麼這個數必然會被 3整除
暴力做法
for (int i=1; i<=9; i++)
}}由於資料高達 1e9不可行
仔細觀察發現,對於乙個數 i ,選了 1,4,7,..,3∗x+1個的時候,得到的關於 3 的模數都是相等的,
即1∗i % 3=4∗i % 3=7∗i % 3=...=(3∗x+1)∗i % 3
同理2∗i % 3=5∗i % 3=8∗i % 3=...=(3∗x+2)∗i % 3
0∗i % 3=3∗i % 3=6∗i % 3=...=(3∗x)∗i % 3
因此只有 3 個可能的模數,複雜度可以優化成 o (9∗3∗3)。
#include using namespace std;
#define int long long
const int maxn=5e5+10;
const int mod=1e9+7;
int a[20];
int dp[10][5];//表示只選擇數字 1-i ,累加和 % 3 =j 的方案有多少
/*for (int i=1; i<=9; i++)
}}暴力做法
*/signed main()
dp[0][0]=1;
for(int i=1;i<=9;i++)
}cout
乙個十進位制數每一位累加是 3 的倍數,那麼這個數必然會被 3整除。
*/
牛客小白月賽43 F 全體集合
題目鏈結 f 全體集合 給出 n 個點 m 條邊的無向圖,給出 k 個點上分別有乙個人,每個人一次只能走到乙個相鄰的節點,問有沒有一種可能讓這些人都走到乙個點。考慮使用二分圖染色 如果染色成功,說明這個圖是二分圖,那麼對於不同顏色的點永遠不可能走到一起,題目也說了這個圖是聯通的,所以說如果這 k 個...
牛客小白月賽3
a 我們規定母音字母有a e i o u,並且規定半母音字母y也是母音字母。cwbc在學習英語,xhrlyb為了讓cwbc的記憶更加深刻,於是她讓cwbc把每個字串的所有字母都變成乙個恰好不大於它本身的小寫母音字母。可是cwbc比較貪玩,並且他想讓你幫他完成這個任務。聰明的你在仔細閱讀題目後,一定可...
牛客小白月賽6
c 挑花 dfs或bfs 桃花一簇開無主,可愛深紅映淺紅。題百葉桃花 桃花長在桃樹上,樹的每個節點有乙個桃花,調皮的htbest想摘盡可能多的桃花。htbest有乙個魔法棒,摘到樹上任意一條鏈上的所有桃花,由於htbest法力有限,只能使用一次魔法棒,請求出htbest最多可以摘到多少個桃花。第一行...