P2000 拯救世界

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2000 拯救世界相关的知识,希望对你有一定的参考价值。

P2000 拯救世界

题意:

为了拯救世界,小 a 和 uim 决定召唤出 kkksc03 大神和 lzn 大神。根据古籍记载,召唤出任何一位大神,都需要使用金木水火土五种五行神石来摆一个特定的大阵。而在古籍中,记载是这样的:

kkksc03 大神召唤方法:

金神石的块数必须是 6 的倍数。

木神石最多用 9 块。

水神石最多用 5 块。

火神石的块数必须是 4 的倍数。

土神石最多用 7 块。

lzn 大神召唤方法:

金神石的块数必须是 2 的倍数。

木神石最多用 1 块。

水神石的块数必须是 8 的倍数。

火神石的块数必须是 10 的倍数。

土神石最多用 33块。

现在是公元 1999 年 12 月 31 日,小 a 和 uim 从 00:00:00 开始找,一直找到 23:00:00,终于,还是没找到神石。不过,他们在回到家后在自家地窖里发现了一些奇怪的东西,一查古籍,哎呦妈呀,怎么不早点来呢?这里有一些混沌之石,可以通过敲击而衰变成五行神石。于是,他们拼命地敲,终于敲出了n块神石,在 23:59:59 完成了两座大阵。然而,kkksc03 大神和 lzn 大神确实出现了,但是由于能量不够,无法发挥神力。只有把所有用 n 块神石可能摆出的大阵都摆出来,才能给他们充满能量。这下小 a 和 uim 傻了眼了,赶快联系上了你,让你帮忙算一下,一共有多少种大阵。

题解:

很明显,生成函数题目
我们考虑每个石头的情况:
kkksc03:
金神石的块数必须是 6 的倍数。: f 1 = 1 + x 6 + x 12 + . . f1=1+x^6+x^{12}+.. f1=1+x6+x12+..
木神石最多用9块: f 2 = 1 + x 1 + x 2 + x 3 + . . . + x 9 f2=1+x^1+x^2+x^3+...+x^9 f2=1+x1+x2+x3+...+x9
水神石最多用5块: f 3 = 1 + x 1 + x 2 + x 3 + x 4 + x 5 f3=1+x^1+x^2+x^3+x^4+x^5 f3=1+x1+x2+x3+x4+x5
火神石的块数必须是 4 的倍数。: f 4 = 1 + x 4 + x 8 + x 1 2 + . . . f4=1+x^4+x^{8}+x^12+... f4=1+x4+x8+x12+...
土神石最多用7块: f 5 = 1 + x 1 + x 2 + x 3 + x 4 + x 5 + x 6 + x 7 f5=1+x^1+x^2+x^3+x^4+x^5+x^6+x^7 f5=1+x1+x2+x3+x4+x5+x6+x7
lzn大神:
金神石的块数必须是 2 的倍数。: f 6 = 1 + x 2 + x 4 + . . . f6=1+x^2+x^{4}+... f6=1+x2+x4+...
木神石最多用1块: f 7 = 1 + x 1 f7=1+x^1 f7=1+x1
水神石的块数必须是 8 的倍数: f 8 = 1 + x 8 + x 16 + x 24 + . . . . f8=1+x^8+x^{16}+x^{24}+.... f8=1+x8+x16+x24+....
火神石的块数必须是 10 的倍数。: f 9 = 1 + x 10 + x 20 + x 30 + . . . f9=1+x^{10}+x^{20}+x^{30}+... f9=1+x10+x20+x30+...
土神石最多用3块: f 10 = 1 + x 1 + x 2 + x 3 f10=1+x^1+x^2+x^3 f10=1+x1+x2+x3
答案就是: F = f 1 ∗ f 2 ∗ f 3 ∗ f 4 ∗ f 5 ∗ f 6 ∗ f 7 ∗ f 8 ∗ f 9 ∗ f 10 = 1 ( 1 − x ) 5 F=f1*f2*f3*f4*f5*f6*f7*f8*f9*f10=\\frac{1}{(1-x)^5} F=f1f2f3f4f5f6f7f8f9f10=(1x)51
1 ( 1 − x ) 5 = ∑ i = 0 ∞ C 5 + i − 1 i x i = ∑ i = 0 ∞ C 4 + i i x i \\frac{1}{(1-x)^5}=\\sum_{i=0}^{∞}C_{5+i-1}^{i}x^i=\\sum_{i=0}^{∞}C_{4+i}^{i}x^i (1x)51=i=0C5+i1ixi=i=0C4+iixi
第n项的系数是: C 4 + n n = ( n + 4 ) ( n + 3 ) ( n + 2 ) ( n + 1 ) 4 ! C_{4+n}^{n}=\\frac{(n+4)(n+3)(n+2)(n+1)}{4!} C4+nn=4!(n+4)(n+3)(n+2)(n+1)
因为n很大,高精度也没法计算,所以要用NTT加速一下
FFT/NTT如何实现高精度乘法的:
都是到FFT可以处理多项式乘法,那我们完全可以将一个高精度整数写成多项式形式。
对于每一个n的十进制数,我们可以看作一个n-1次多项式A,满足:
A ( x ) = a 0 + a 1 ∗ 1 0 1 + a 2 ∗ 1 0 2 + . . . . + a n − 1 ∗ 1 0 n − 1 A(x)=a_{0}+a_{1}*10^1+a_{2}*10^2+....+a_{n-1}*10^{n-1} A(x)=a0+a1101+luogu P2000 拯救世界

拯救世界

拯救世界

清北学堂模拟赛d7t6 拯救世界

刚刚,图灵奖授予“深度学习三巨头”!他们拯救了AI改变了世界

2.5星|郎咸平《拯救世界的经济学》:各发达国家与中国的福利政策经济干预政策的前世今生