正题

题目链接: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. JQuery DOM基本操作
  2. Nginx搭建部署Web服务器并与NFS结合搭建负载均衡服务器
  3. 理解lua中 . : self
  4. Linux系统使用GPT分区表方案推荐
  5. git冲突解决办法合集
  6. 115网盘 最好的网盘 雨林木风出品 强烈推荐
  7. c 语言百度翻译软件,百度翻译api 实现简易微信翻译小程序
  8. 使用adb工具打开TCL电视的第三方应用安装权限
  9. 网页中常说的‘焦点’是什么意思
  10. “五小时定律”:巴菲特受益一生的生活习惯
  11. Day10-服务调用-删除课程的同时删除所有小节视频-p158、p159
  12. 【imessage群发苹果推信】[iMessageSuspic](Apple推送服务)使用信息推送服务
  13. 关于人机智能的几点思考
  14. AS3字符串正则表达式
  15. “四次工业革命”的代表性技术/应用/意义
  16. php网盘代码,php网盘源码
  17. PHP isset() 和 empty() 的使用
  18. java环境安装(java环境安装教程)
  19. 微星GeForce GTX 1050Ti 4G OC
  20. 深圳市云海麒麟计算机系统,北京云海麒麟容错服务器解决方案

热门文章

  1. 兔子野鸡49只100条腿c语言,家禽生产学复习题
  2. c语言字符比较思路,C语言讲解思路资料
  3. 如何给柱状图柱子添加阴影_【LeetCode日记】84. 柱状图中最大的矩形
  4. html li 做瀑布流,js实现瀑布流效果(自动生成新的内容)
  5. html css 重复,CSS重复定义的问题请教_html/css_WEB-ITnose
  6. python编_python编
  7. [mybatis]动态sql_sql_抽取可重用的sql片段
  8. POJ 3984 迷宫问题
  9. 简历中能熟练使用计算机怎么写,过了计算机二级,可以在简历里写“熟练掌握Excel”吗?...
  10. 本地Jupyter连接远程linux服务器