P2000-拯救世界【生成函数,NTT】
正题
题目链接: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】相关推荐
- P2000 拯救世界
P2000 拯救世界 题意: 为了拯救世界,小 a 和 uim 决定召唤出 kkksc03 大神和 lzn 大神.根据古籍记载,召唤出任何一位大神,都需要使用金木水火土五种五行神石来摆一个特定的大阵. ...
- P2012 拯救世界2(指数型生成函数)
P2012 拯救世界2 三种基因,我们分别列出其生成函数: F(x)=∑n≥0xnn!=exG(x)=∑n≥0x2n+1(2n+1)!=12(∑n≥0xnn!−∑n≥0(−1)nxnn!)=12(ex ...
- 用GPU拯救世界:英伟达斯坦福呼吁玩家捐献算力,投入新冠病毒相关蛋白质分布式计算...
鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 作为一名普通的游戏玩家,除了注意防护.减少出行外,还能为新冠疫情做些什么? 英伟达呼吁:捐出你的 GPU/CPU 算力. 怎么个捐法? 通过 ...
- 你不是在拯救世界就是在拯救世界的路上
你不是在拯救世界,就是在拯救世界的路上. 每一个后期上辈子都是折翼的天使,当你处于5楼或者10楼的时候,RD时你前面出现了四个折翼天使的时候,你就准备玩蛋去吧. 全场处于愤怒之中,四处追赶敌人并且屡次 ...
- 本能富可敌国,最后却选择拯救世界!Bram的Vim和乌干达儿童
他本能富可敌国,最后却选择拯救世界 在命令行界面输入vim会出现一堆文件,但是一直有这么一句话 Help poor children in Uganda! "帮助可怜的乌干达儿童" ...
- 苹果阻止《堡垒之夜:拯救世界》Mac版更新
9月19日消息,Epic<堡垒之夜>官方发布公告称,<堡垒之夜:拯救世界>将在安装Mac系统的平台上停止更新,并且为购买和游玩"Save The World" ...
- python是最美的语言阅读答案_《拯救世界上最美的语言》阅读答案
拯救世界上最美的语言 ①在过去的一百年中,汉语和汉语写作饱经磨难.没有一种语言像中文那样,在这一百多年 来经历了如此重大的变革.从晚清效仿日本明治维新的"言文一致"运动开始,汉语经 ...
- 转转“拯救世界”的第一步,师从小米换LOGO?
宣布转型循环经济产业公司的转转集团,也换了个新LOGO. 一石惊起千层浪. 网友戏称:"互联网品牌不是在换LOGO就是在换LOGO的路上".事实也是如此,近两年无论是LOGO用了十 ...
- 腾讯的野望:一个游戏公司怎么拯救世界?
腾讯的野望:一个游戏公司怎么拯救世界? 星际密探 2020-01-06 21:21:29 腾讯的野望:一个游戏公司怎么拯救世界? 神要是公然去跟人作对,那是任何人都难以对付的.--<荷马史诗&g ...
- php 刀客友朋,说好的英雄拯救世界
"汐棠,怎么说也是高中生了,表现的这么兴奋是不是太小了啊,沉稳一点,有那么兴奋吗?"林翠儿忍不住摇头. "高中生怎么了?看那些成年人不也一个个很高兴的样子吗." ...
最新文章
- JQuery DOM基本操作
- Nginx搭建部署Web服务器并与NFS结合搭建负载均衡服务器
- 理解lua中 . : self
- Linux系统使用GPT分区表方案推荐
- git冲突解决办法合集
- 115网盘 最好的网盘 雨林木风出品 强烈推荐
- c 语言百度翻译软件,百度翻译api 实现简易微信翻译小程序
- 使用adb工具打开TCL电视的第三方应用安装权限
- 网页中常说的‘焦点’是什么意思
- “五小时定律”:巴菲特受益一生的生活习惯
- Day10-服务调用-删除课程的同时删除所有小节视频-p158、p159
- 【imessage群发苹果推信】[iMessageSuspic](Apple推送服务)使用信息推送服务
- 关于人机智能的几点思考
- AS3字符串正则表达式
- “四次工业革命”的代表性技术/应用/意义
- php网盘代码,php网盘源码
- PHP isset() 和 empty() 的使用
- java环境安装(java环境安装教程)
- 微星GeForce GTX 1050Ti 4G OC
- 深圳市云海麒麟计算机系统,北京云海麒麟容错服务器解决方案
热门文章
- 兔子野鸡49只100条腿c语言,家禽生产学复习题
- c语言字符比较思路,C语言讲解思路资料
- 如何给柱状图柱子添加阴影_【LeetCode日记】84. 柱状图中最大的矩形
- html li 做瀑布流,js实现瀑布流效果(自动生成新的内容)
- html css 重复,CSS重复定义的问题请教_html/css_WEB-ITnose
- python编_python编
- [mybatis]动态sql_sql_抽取可重用的sql片段
- POJ 3984 迷宫问题
- 简历中能熟练使用计算机怎么写,过了计算机二级,可以在简历里写“熟练掌握Excel”吗?...
- 本地Jupyter连接远程linux服务器