题目链接
这题还是蛮不错的,去年noip之前就推出了通项,但因为FFT被卡了精度就一直没写
和那道食物差不多的推式子方法
kkksc03大神召唤方法:
金神石的块数必须是6的倍数。
1+x6+x12+...=1x6−11+x^6+x^{12}+...=\frac{1}{x^6-1}1+x6+x12+...=x6−11​
木神石最多用9块。
1+x+x2+...+x9=x10−1x−11+x+x^2+...+x^9=\frac{x^{10}-1}{x-1}1+x+x2+...+x9=x−1x10−1​
水神石最多用5块。
x6−1x−1\frac{x^6-1}{x-1}x−1x6−1​
火神石的块数必须是4的倍数。
1x4−1\frac{1}{x^4-1}x4−11​
土神石最多用7块。
x8−1x−1\frac{x^8-1}{x-1}x−1x8−1​
lzn大神召唤方法:
金神石的块数必须是2的倍数。
1x2−1\frac{1}{x^2-1}x2−11​
木神石最多用1块。
x2−1x−1\frac{x^2-1}{x-1}x−1x2−1​
水神石的块数必须是8的倍数。
1x8−1\frac{1}{x^8-1}x8−11​
火神石的块数必须是10的倍数。
1x10−1\frac{1}{x^{10}-1}x10−11​
土神石最多用3块。
x4−1x−1\frac{x^4-1}{x-1}x−1x4−1​

反正一乘就会发现消掉了一堆,得到了
1(1−x)5\frac{1}{(1-x)^5}(1−x)51​

广义二项式定理一下就是cn+5−15−1=(n+1)(n+2)(n+3)(n+4)24c^{5-1}_{n+5-1}=\frac{(n+1)(n+2)(n+3)(n+4)}{24}cn+5−15−1​=24(n+1)(n+2)(n+3)(n+4)​

因为长度很长所以要高精度,用NTT搞下就可以了

代码如下:(一如既往的难看

#include<bits/stdc++.h>
#define mod 998244353
#define g 3ll
using namespace std;char s[100010];long long kasumi(long long a,long long b)
{long long ans=1;while(b){if(b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}long long n1[600040],n2[600040],n3[600040],n4[600040],ans[600040];
long long len1,len2,len3,len4;
long long limit=1,r[600040];long long NTT(long long *a,long long kd)
{for(long long i=0;i<limit;i++){if(i<r[i]){swap(a[i],a[r[i]]);}}for(long long mid=1;mid<limit;mid<<=1){long long tmp=kasumi(g,(mod-1)/(mid*2));if(kd) tmp=kasumi(tmp,mod-2);for(long long i=0;i<limit;i+=mid*2){long long w=1;for(long long j=0;j<mid;j++,w=w*tmp%mod){long long x=a[i+j];long long y=w*a[i+j+mid]%mod;a[i+j]=(x+y+mod)%mod;a[i+j+mid]=(x-y+mod)%mod;}// cerr<<w<<endl;}}if(kd){long long inv=kasumi(limit,mod-2);for(long long i=0;i<limit;i++){a[i]=a[i]*inv%mod;}}
}void mul(long long *a,long long *b)
{NTT(a,0);NTT(b,0);for(long long i=0;i<limit;i++){a[i]=a[i]*b[i]%mod;}NTT(a,1);long long tmp=0;for(long long i=0;i<limit;i++){n1[i]+=tmp;tmp=n1[i]/10;n1[i]%=10;if(n1[i]) len1=i+1;}
}int main()
{long long ll=0;scanf("%s",s);long long len=strlen(s);while(limit<=400000) limit<<=1,ll++;for(int i=0;i<limit;i++){r[i]=r[i>>1]>>1|((i&1)<<(ll-1));}reverse(s,s+len);for(int i=0;i<len;i++){n1[i]=s[i]-'0';}long long x=1;for(int i=0;i<=len;i++){n1[i]=n1[i]+x;x=n1[i]/10;n1[i]=n1[i]%10;if(n1[i]) len1=i+1;}x=1;for(int i=0;i<len1;i++){n2[i]=n1[i]+x;x=n2[i]/10;n2[i]=n2[i]%10;if(n2[i]) len2=i+1;}x=1;for(int i=0;i<len2;i++){n3[i]=n2[i]+x;x=n3[i]/10;n3[i]=n3[i]%10;if(n3[i]) len3=i+1;}x=1;for(int i=0;i<len3;i++){n4[i]=n3[i]+x;x=n4[i]/10;n4[i]=n4[i]%10;if(n4[i]) len4=i+1;}mul(n1,n2);mul(n1,n3);mul(n1,n4);long long p=0,lenn=0;for(int i=len1-1;i>=0;i--){p=p*10+n1[i];ans[i]=p/24;p%=24;if(ans[i]&&!lenn) lenn=i+1;}if(!lenn) lenn=1;for(int i=lenn-1;i>=0;i--){printf("%lld",ans[i]);}
}

洛谷P2000 拯救世界(NTT+生成函数)相关推荐

  1. P2000 拯救世界

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

  2. 洛谷P1506 拯救oibh总部 —DFS—围墙

    拯救oibh总部 - 洛谷 ## 题目背景 oibh 总部突然被水淹没了!现在需要你的救援-- ## 题目描述 oibh 被突来的洪水淹没了,还好 oibh 总部有在某些重要的地方起一些围墙.用 `* ...

  3. 洛谷P4705 玩游戏(生成函数+多项式运算)

    题面 传送门 题解 妈呀这辣鸡题目调了我整整三天--最后发现竟然是因为分治\(NTT\)之后的多项式长度不是\(2\)的幂导致把多项式的值存下来的时候发生了一些玄学错误--玄学到了我\(WA\)的点全 ...

  4. 【洛谷 4799】 世界冰球锦标赛 Meet in the Middle 折半搜索

    题目描述 译自 CEOI2015 Day2 T1「Ice Hockey World Championship」 今年的世界冰球锦标赛在捷克举行.Bobek 已经抵达布拉格,他不是任何团队的粉丝,也没有 ...

  5. 洛谷 P1506 拯救oibh总部

    P1506 拯救oibh总部 题目背景 oibh总部突然被水淹没了!现在需要你的救援-- 题目描述 oibh被突来的洪水淹没了>.<还好oibh总部有在某些重要的地方起一些围墙,用*号表示 ...

  6. 洛谷P1506 拯救oibh总部【DFS】

    题目链接:P1506 拯救oibh总部 程序说明: 深度优先搜索,和P1162填涂颜色差不多(没有区别). 参考题解:P1506 拯救oibh总部 题解 代码如下: #include <iost ...

  7. 洛谷 P1506 拯救oibh总部-dfs染色法

    题目背景 oibh总部突然被水淹没了!现在需要你的救援-- 题目描述 oibh被突来的洪水淹没了>.<还好oibh总部有在某些重要的地方起一些围墙,用号表示,而一个封闭的号区域洪水是进不去 ...

  8. 洛谷P4799:世界冰球锦标赛【折半搜索】

    先看题: 这道题如果直接搜索的话,那肯定是不行,因为时间复杂度太高了,是o(2^n): 但是这并不代表搜索不能用,我们可以利用<三数之和>这道题的思想: 我们可以先对前1~n/2的数据进行 ...

  9. 洛谷 P1506 拯救oibh总部 题解(洪水填充法的模板)

    目录 题目背景 题目描述 输入格式 输出格式 输入输出样例 hack: 说明/提示 总结 题目背景 oibh 总部突然被水淹没了!现在需要你的救援-- 题目描述 oibh 被突来的洪水淹没了,还好 o ...

  10. 洛谷p1506——拯救oibh总部 Java题解 DFS

    看了一下java的题解比较少,来发表一下Java AC代码.用的是DFS,染色题型. import java.util.*; public class Main{static Scanner sc=n ...

最新文章

  1. 干货满满:详解四组遍历数组
  2. 是时候搞清楚 Spring Boot 的配置文件 application.properties 了!
  3. moss自定义内容查询webpart
  4. boost::random模块实现允许直观地检查分布函数的结果的测试程序
  5. php表格单元格怎么实现排序,javascript实现对表格元素进行排序操作
  6. flask html 路径,【Python】Flask 怎样获取当前页面的相对路径
  7. 移动端手机抓包工具小助手
  8. 欧华android导航刷机,寻找欧华DVD导航一体机刷机文件。
  9. Conficker蠕虫病毒专杀工具集锦
  10. 个人知乎 ##功能一-登录注册
  11. 【数字IC】深入浅出理解UART协议
  12. 经度,纬度的正则表达式
  13. 静态资源压缩-nginx缓存问题
  14. “2019/10/17创新创业工坊第六期第二课”心得体会
  15. 像电影里的黑客高手一样敲代码攻击入侵网站!装逼神器 !
  16. echarts饼图南丁格尔玫瑰图属性设置
  17. 【Mac OS】如何快速复制文件或文件夹路径
  18. 狂神说笔记——Java SE基础01
  19. android 首页里布局,android复杂首页布局
  20. 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记5:第三章 常用函数1——文件读写、算术平均值、最大值最小值、极值

热门文章

  1. android原生组件,RN原生的安卓UI组件
  2. 20130114 1080p vs. 1080i
  3. 安装Ubuntu18.10并安装华硕AC57无线网卡驱动
  4. linux下自动更换壁纸软件,适用于Ubuntu 18.04的4款最佳壁纸自动切换软件
  5. MessageBox中涉及到的宏定义
  6. 百度地图api的实现
  7. 迅视财经 五条特色大街上线
  8. UE4内容浏览器改文件夹名称后无法删除空文件夹
  9. [附源码]Python计算机毕业设计大学生学科竞赛管理系统
  10. 实体与实体之间的联系