正题

题目链接:https://www.luogu.com.cn/problem/P2000


题目大意

十种东西,有要求

金神石A的块数必须是 6 的倍数。
木神石A最多用 9 块。
水神石A最多用 5 块。
火神石A的块数必须是 4 的倍数。
土神石A最多用 7 块。
金神石B的块数必须是 2 的倍数。
木神石B最多用 1 块。
水神石B的块数必须是 8 的倍数。
火神石B的块数必须是 10 的倍数。
土神石B最多用 3 块。

要求所有物品物件和为nnn,求方案数。


解题思路

考虑生成函数,用生成函数分别表示就是
(1+x6+x12+x18+...)∗(x1+x2+...x9)∗...(1+x^6+x^{12}+x^{18}+...)*(x^1+x^2+...x^9)*...(1+x6+x12+x18+...)∗(x1+x2+...x9)∗...
推下去,我们可以化简后得出
11−x6∗1−x101−x∗1−x61−x∗11−x4∗1−x81−x\frac{1}{1-x^6}*\frac{1-x^{10}}{1-x}*\frac{1-x^6}{1-x}*\frac{1}{1-x^4}*\frac{1-x^8}{1-x}1−x61​∗1−x1−x10​∗1−x1−x6​∗1−x41​∗1−x1−x8​

∗*∗

11−x2∗1−x21−x∗11−x8∗11−x10∗11−x3\frac{1}{1-x^2}*\frac{1-x^2}{1-x}*\frac{1}{1-x^8}*\frac{1}{1-x^{10}}*\frac{1}{1-x^3}1−x21​∗1−x1−x2​∗1−x81​∗1−x101​∗1−x31​
然后约分后得到
原式=1(1−x)5=Cn+44原式=\frac{1}{(1-x)^5}=C^{4}_{n+4}原式=(1−x)51​=Cn+44​

最后化简成组合数我是不会的,但是换种方法可以理解为
1(1−x)2=(∑i=0∞xi)5\frac{1}{(1-x)^2}=(\sum_{i=0}^{\infty}x^i)^5(1−x)21​=(i=0∑∞​xi)5
就是将nnn个数划分成五段的方案数(可以为空)

这样就可以化简成那个组合数

然后考虑高精度计算Cn+44=(n+1)∗(n+2)∗(n+3)∗(n+4)24C^4_{n+4}=\frac{(n+1)*(n+2)*(n+3)*(n+4)}{24}Cn+44​=24(n+1)∗(n+2)∗(n+3)∗(n+4)​

因为数据很大,需要NTTNTTNTT优化高精度,这里的方法是,

因为原本的乘法需要模101010,不是质数很难搞,这里我们可以先让他模一个大质数,计算完后再统一进位(这里需要保证两个位上的数相乘不会大于那个大质数)

然后除单精就好了


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=5e6+10,XJQ=998244353;
char s[N];
ll n,L,invn;
ll a[N],b[N],r[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%XJQ;x=x*x%XJQ;b>>=1;}return ans;
}
void NTT(ll *x,ll op){for(ll i=0;i<n;i++)if(i<r[i])swap(x[i],x[r[i]]);for(ll p=2;p<=n;p<<=1){ll l=p>>1,tmp=power(3,(XJQ-1)/p);if(op==-1)tmp=power(tmp,XJQ-2);for(ll k=0;k<n;k+=p){ll buf=1;for(ll i=k;i<k+l;i++){ll tt=buf*x[i+l]%XJQ;x[l+i]=(x[i]-tt+XJQ)%XJQ;x[i]=(x[i]+tt)%XJQ;buf=buf*tmp%XJQ;}}}if(op==-1)for(ll i=0;i<n;i++)x[i]=x[i]*invn%XJQ;return;
}
void mul(ll x){for(ll i=0;i<L;i++)b[L-i-1]=s[i]-'0';b[0]+=x;NTT(a,1);NTT(b,1);for(ll i=0;i<n;i++)a[i]=a[i]*b[i]%XJQ,b[i]=0;NTT(a,-1);for(ll i=0;i<n;i++){(a[i+1]+=a[i]/10)%XJQ;a[i]%=10;}return;
}
int main()
{scanf("%s",s);L=strlen(s);for(ll i=0;i<L;i++)a[L-i-1]=s[i]-'0';for(n=1;n<=L*5;n<<=1);for(ll i=0;i<n;i++)r[i]=(r[i>>1]>>1)|((i&1)?(n>>1):0);invn=power(n,XJQ-2);a[0]++;for(ll i=2;i<=4;i++)mul(i);for(ll i=n-1;i>=0;i--)a[i-1]+=a[i]%24*10,a[i]/=24;ll w=n-1;while(!a[w])w--;for(;w>=0;w--)printf("%lld",a[w]);
}

P2000-拯救世界【生成函数,NTT】相关推荐

  1. P2000 拯救世界

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

  2. P2012 拯救世界2(指数型生成函数)

    P2012 拯救世界2 三种基因,我们分别列出其生成函数: F(x)=∑n≥0xnn!=exG(x)=∑n≥0x2n+1(2n+1)!=12(∑n≥0xnn!−∑n≥0(−1)nxnn!)=12(ex ...

  3. 用GPU拯救世界:英伟达斯坦福呼吁玩家捐献算力,投入新冠病毒相关蛋白质分布式计算...

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 作为一名普通的游戏玩家,除了注意防护.减少出行外,还能为新冠疫情做些什么? 英伟达呼吁:捐出你的 GPU/CPU 算力. 怎么个捐法? 通过 ...

  4. 你不是在拯救世界就是在拯救世界的路上

    你不是在拯救世界,就是在拯救世界的路上. 每一个后期上辈子都是折翼的天使,当你处于5楼或者10楼的时候,RD时你前面出现了四个折翼天使的时候,你就准备玩蛋去吧. 全场处于愤怒之中,四处追赶敌人并且屡次 ...

  5. 本能富可敌国,最后却选择拯救世界!Bram的Vim和乌干达儿童

    他本能富可敌国,最后却选择拯救世界 在命令行界面输入vim会出现一堆文件,但是一直有这么一句话 Help poor children in Uganda! "帮助可怜的乌干达儿童" ...

  6. 苹果阻止《堡垒之夜:拯救世界》Mac版更新

    9月19日消息,Epic<堡垒之夜>官方发布公告称,<堡垒之夜:拯救世界>将在安装Mac系统的平台上停止更新,并且为购买和游玩"Save The World" ...

  7. python是最美的语言阅读答案_《拯救世界上最美的语言》阅读答案

    拯救世界上最美的语言 ①在过去的一百年中,汉语和汉语写作饱经磨难.没有一种语言像中文那样,在这一百多年 来经历了如此重大的变革.从晚清效仿日本明治维新的"言文一致"运动开始,汉语经 ...

  8. 转转“拯救世界”的第一步,师从小米换LOGO?

    宣布转型循环经济产业公司的转转集团,也换了个新LOGO. 一石惊起千层浪. 网友戏称:"互联网品牌不是在换LOGO就是在换LOGO的路上".事实也是如此,近两年无论是LOGO用了十 ...

  9. 腾讯的野望:一个游戏公司怎么拯救世界?

    腾讯的野望:一个游戏公司怎么拯救世界? 星际密探 2020-01-06 21:21:29 腾讯的野望:一个游戏公司怎么拯救世界? 神要是公然去跟人作对,那是任何人都难以对付的.--<荷马史诗&g ...

  10. php 刀客友朋,说好的英雄拯救世界

    "汐棠,怎么说也是高中生了,表现的这么兴奋是不是太小了啊,沉稳一点,有那么兴奋吗?"林翠儿忍不住摇头. "高中生怎么了?看那些成年人不也一个个很高兴的样子吗." ...

最新文章

  1. 苹果自动驾驶部门「裁员」又「重组」,AI负责人接掌「泰坦」
  2. IOS8的新特性:简洁易用的毛玻璃效果
  3. 十八年前漏洞再现,影响所有Windows版本
  4. 开源SVM库libSVM介绍
  5. promise中调用ajax
  6. linux系统atom安装教程,Ubuntu/Linux Mint上安装Atom文本编辑器
  7. Spring框架声明式事务管理
  8. Dave和Gunnar采访Lauren Egts:Raspberry Pi,Scratch等
  9. Typora入门基本教程
  10. Java基础学习总结(154)——Synchronized与Volatile、Synchronized与ReentrantLock概念及区别
  11. (十)Struts2 值栈/OGNL
  12. python 在线培训费用-Python人工智能在线培训班学费多少钱?
  13. 无人机——凤凰模拟器篇(四)图文安装教程(附软件下载)
  14. 软件测试 atp,ATP使用方法详细-内部资料-软件测试文档类资源
  15. 代码走查(codereview)如何执行才能提升代码质量
  16. 加密日记 android,Lifeograph加密日记应用程序
  17. 2021深圳杯数学建模D题思路分析
  18. 服务器弄好了怎么做网站,怎么自己做网站?自己做网站都需要什么?
  19. DECOUPLED WEIGHT DECAY REGULARIZATION
  20. 蚂蚁愚人节视频透露的真相:区块链只有科技巨头才玩得起?

热门文章

  1. ai怎么调界面大小_科研论文作图系列-从PPT到AI (一)
  2. word2vec原理_word2vec论文阅读笔记
  3. mysql group by 范围_MySQL 按照范围/等级 进行Group By
  4. python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组...
  5. mysql脚本的制作_制作脚本实现mysql自动备份
  6. mysql下载了解压版怎么_教你安装Mysql(解压版/非安装包)图文教程
  7. [Spring5]IOC容器_Bean管理XML方式_注入其他类型属性
  8. Mysql@和@@符号的详细使用说明
  9. C++实现双栈结构(一个顺序表中使用两个栈)
  10. [PAT乙级]1030 完美数列