洛谷T96628 統計

2022-08-03 02:00:17 字數 1545 閱讀 7950

給定$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行,分別表示加入和詢問操作 其...