給定$n$, $m$,求十進位制$n$位數每個位數之積等於k的方案數
dp+高精+數學
考慮$k=0$的情況,由於可以有若干個$0$,所以方案數為$\sum\limits_^\times 9^$
考慮另外的情況,我們將$k$分解質因數,如果$k$還有除了$2$,$3$,$5$,$7$之外的質因數那麼方案數為$0$
其餘的情況我們考慮乙個$dp$,定義$f[i][j][k][l][o]$表示考慮前$i$位,前$i$位之積$=2^j\times 3^k\times 5^l\times7^o$的方案數是多少,顯然第一維可以用滾動陣列壓掉,轉移就類似於揹包的轉移即可。
由於本題十分噁心的沒有取模,所以我們需要高精度計算
#include //check if it is judged online
#define local
namespace
shl
void mul(ull x, ull base, int
mi)
for (register int i = 1; i <= lens; ++i) sum[i] *=x;
for (register int i = 1; i <= lens; ++i)
sum[i + 1] += sum[i] / mod, sum[i] %=mod;
while (sum[lens + 1]) lens++;
}void plus(int x[60], int y[60
])
intmain()
for (register int i = lena; i >= 1; --i)
printf("%d
", ans[i]);
puts(
"");
return0;
}int a1 = 0, a2 = 0, a3 = 0, a4 = 0
;
while (k % 2 == 0) a1++, k /= 2
;
while (k % 3 == 0) a2++, k /= 3
;
while (k % 5 == 0) a3++, k /= 5
;
while (k % 7 == 0) a4++, k /= 7
;
if (k > 1
) f[
0][0][0][0][0] = 1
; f[
0][0][0][0][1] = 1
;
for (register int i = 1; i <= n; ++i)
}for (register int i = max(f[a1][a2][a3][a4][0], 1); i >= 1; --i)
printf("%d
", f[a1][a2][a3][a4][i]);
return0;
}}int
main()
洛谷 T156530 儒略曆
在 1582 年之前,以 4 為倍數的年份為閏年。正常情況下,一年中一月到十二月的天數分別是 31,28,31,30,31,30,31,31,30,31,30,31 天。如果這年是閏年,那麼二月則有 29 天。但某位皇帝發現這麼做其實不夠準確,會造成誤差,因此規定從 1582 年開始,以 4 為倍數...
洛谷T51924 忘情
二分上界有多大開多大 二分上界有多大開多大 二分上界有多大開多大 重要的事情說三遍 又被bright神仙帶著做題了 先無腦上wqs二分 我們可以把這個柿子畫一下,區間的花費就變成 sigema l r i s i 1 2了 那麼這個東西經過我艱苦的畫柿子證明是滿足四邊形不等式的 然後就和貞魚那題一樣...
洛谷2068 統計和
給定乙個長度為n n 100000 初始值都為0的序列,x x 10000 次的修改某些位置上的數字,每次加上乙個數,然後提出y y 10000 個問題,求每段區間的和。時間限制1秒。輸入格式 第一行1個數,表示序列的長度n 第二行1個數,表示操作的次數w 後面依次是w行,分別表示加入和詢問操作 其...