Wannafly挑战赛14 F
Shero在秘密基地有一个专门研究活骸化的实验室。
实验室里面有一排从0开始标号的培养皿,初始的时候只有0号培养皿中有1个细胞。
因为是虚拟实验,所以可以认为培养皿有无限个。
Shero观察发现,来自异世界的细胞分裂速度似乎要比的一般的细胞迅速得多:
具体来说,第n天第k个培养皿中会有2k * C(n,k)个细胞(异世界的细胞当然有能力到处跑啦
输入描述:
第一行两个正整数n,m
输出描述:
设ans[i]表示下标mod 2^m为i的培养皿中的细胞总数一行一个正整数输出
mod 998244353的值
输入
4 2
输出
3738937
心态崩了
挂一道我没有做起的fft板子题
首先看到组合数和次幂
发现可能跟二项式展开有关系
然后发现2^k*C(n,k)就是(2x+1)^n的x^k的系数
然后题目上面求所有次数在模2^m意义下同余的系数和
仔细想想
我们可以给x代入一些我们需要的值
如果x^(2^m)%998244353==1
这个可以用单位根搞定
那不就好了
llj觉得那样我们就可以得到一个2^m元方程
然后我们就可以高斯消元啦
只要我们可以找到一种O(n)的消元方式就好啦
这道题这么特殊
一定可以的!!!!
然后我就浪费了一晚上
再仔细想了想觉得这样不行
如果我知道
2222303=单位根^k
那么我只用代入一次就好啦!!!!
非常的开心
但是发现原根=3时2222303!=单位根的整数次幂
然后我觉得这是原根的问题
然后我就写了个暴力枚举所有原根再BSGS计算2222303是否是单位根的整数次幂
一个小时过去后我再次放弃了
然后看看其他选手的代码长度
????
为什么这么短????
再次仔细想一想
将(2x+1)^n变成一个2^m-1次的多项式
其中由于代入的所有x满足x^(2^m)==1
所以这个2^m-1次的多项式的第k项是(2x+1)^n所有次数与k对模2^m同余的项的系数和
我们发现这就是ans[]
问题就成了
我们可以轻松的知道每个点的值
我们要算每一项的系数
....
然后发现这是个fft的模板题
哦
冷漠
//%std #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<vector> #include<queue> #include<stack> #include<set> #include<map> using namespace std; #define lovelive long long #define lc son[x][0] #define rc son[x][1] #define lowbit(x) (x&(-x)) #define pt vc const lovelive mod=998244353; const lovelive G=3; const int N=1e6+100; void read(lovelive &x) {lovelive p=1;x=0;char c=getchar();while(c<'0'||c>'9'){if(c=='-')p=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-48;c=getchar();}x*=p; } lovelive pow1(lovelive x,lovelive k) {lovelive r=1;if(k<0)k+=mod-1;while(k){if(k&1)r*=x;x*=x;r%=mod;x%=mod;k>>=1;}return r; } void change(lovelive y[],int len) {for(int i=1,j=len>>1,k;i<len-1;i++){if(i<j)swap(y[i],y[j]);k=len>>1;while(j>=k){j-=k;k>>=1;}if(j<k)j+=k;} } void fft(lovelive y[],int len,int on) {change(y,len);for(int h=2;h<=len;h<<=1){lovelive wn=pow1(G,(mod-1)*on/h);for(int j=0;j<len;j+=h){lovelive w=1;for(int i=j;i<j+(h>>1);i++){lovelive u=y[i],v=w*y[i+(h>>1)]%mod;y[i]=(u+v)%mod;y[i+(h>>1)]=(u-v+mod)%mod;w=w*wn%mod; //手动高亮 }}}if(on==-1){lovelive tmp=pow1(len,-1);for(int i=0;i<len;i++)y[i]=y[i]*tmp%mod; } } lovelive ans[N<<2]; int main() {lovelive n,m;read(n);read(m);lovelive w=1,wn=pow1(G,(mod-1)/(1<<m));for(int i=0;i<(1<<m);i++){ans[i]=pow1(2*w+1,n);w=w*wn%mod;}fft(ans,1<<m,-1);w=1,wn=2222303;lovelive r=0;for(int i=0;i<(1<<m);i++){r+=ans[i]*w%mod;r%=mod;w=w*wn%mod;} cout<<r<<"\n";return 0; }
View Code
转载于:https://www.cnblogs.com/NicoDafaGood/p/9011424.html
Wannafly挑战赛14 F相关推荐
- Wannafly挑战赛14 A-直角三棱锥
Wannafly挑战赛14 A-直角三棱锥 链接:https://www.nowcoder.com/acm/contest/81/A 来源:牛客网 题目描述 在三维空间中,平面 x = 0, y = ...
- Wannafly挑战赛14
A.直角三棱锥 枚举推式子 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 LL g ...
- Wannafly挑战赛14 A 直角三棱锥
题目描述 在三维空间中,平面 x = 0, y = 0, z = 0,以及平面 x + y + z = K 围成了一个三棱锥. 整天与整数打交道的小明希望知道这个三棱锥内.上整点的数目. 他觉得数量可 ...
- 【nowcoder Wannafly挑战赛24 F】 wyf的超级多项式【FFT/NTT】【构造】
题目传送门 停更已久的blog... orz ckw大佬 我们考虑构造 f f f的递推式.我们设有数组 c c c,满足 f [ n ] = ∑ i = 1 k c [ i ] × f [ n − ...
- Wannafly挑战赛14 A:直角三棱锥
题意: 链接:https://www.nowcoder.com/acm/contest/81/A 来源:牛客网 在三维空间中,平面 x = 0, y = 0, z = 0,以及平面 x + y + z ...
- [Wannafly挑战赛2D-Delete]最短路
[Wannafly挑战赛2D-Delete]最短路 题目描述 给定一张 n 个点,m 条边的带权有向无环图,同时给定起点 S 和终点 T ,一共有 q 个询问,每次询问删掉某个点和所有与它相连的边之后 ...
- Wannafly挑战赛19
Wannafly挑战赛19 A. 队列Q 需要支持把一个元素移到队首,把一个元素移到队尾,移到队首就直接放到队首前面那个位置,原位置标为0,队尾同理. #include <bits/stdc++ ...
- Wannafly挑战赛18
Wannafly挑战赛18 A. 序列 先考虑暴力,相邻两个树之间乘上给定的三种数,递推出下一个位置填什么,然后再check一下,最后一位是否为1即可.这样时间显然不行,但是给我们一种思路,就是中间的 ...
- Wannafly挑战赛24
Wannafly挑战赛24 题目连接 https://www.nowcoder.com/acm/contest/186#question A.石子游戏 题解 注意到当石子个数为偶数的时候,每回合都会减 ...
最新文章
- LeetCode-剑指 Offer 53 - I. 在排序数组中查找数字 I
- boost::set_union相关的测试程序
- CodeForces - 548D Mike and Feet(单调栈)
- Java 7和Java 8之间的细微自动关闭合同更改
- NVelocity标签设置缓存的解决方案
- 计算机科学与技术专业导论_“课程思政”建设经验分享 | 王振武:专业导论(计算机科学与技术)...
- Mariadb----字符类型 (五)
- 电流电压曲线 vc源码_电瓶修复—充电曲线你知道多少?
- iOS底层探索之Block(四)——Block的探索和源码分析
- 拓端tecdat|R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数
- 面试:Synchronized知识点
- HTML5游子吟网页的完整代码,游子吟
- Python刷博客简易版
- Java类和对象之对象组合之求圆柱体积
- 开源H5棋牌 cocos creator微信棋牌小游戏 幼麟棋牌客户端分析笔记
- 天使投资AI、风险投资VC、私募股权投资PE、投行IB、FOF、普通合伙人GP、有限合伙人LP、PIPE
- Python中字符串转义字符的用法----退格符\b
- OpenWrt下使用iperf测试多跳网络性能
- JavaScript最详细攻略
- 【Linux上分之路】第十二篇:Linux三剑客grep、sed、awk
热门文章
- java堆外内存为何比java堆更适合用来进行网络IO操作
- 关于libusb-win32开发的经验
- android获取有线、wifi、3G(4G)的IP
- VB中FSO的调用的两种方法
- 不被大神Hinton认同,否定现有同行成果,谷歌这篇烧脑研究最终拿下ICML2019最佳论文...
- 如今,进北大要看脸了
- 与神经网络相比,你对P图一无所知
- Quick Switch Virtual Desktop[AutoHotkey]
- bugkuCTF解题记录——5、web基础$_POST
- zabbix的trigger