Shero在秘密基地有一个专门研究活骸化的实验室。
实验室里面有一排从0开始标号的培养皿,初始的时候只有0号培养皿中有1个细胞。
因为是虚拟实验,所以可以认为培养皿有无限个。
Shero观察发现,来自异世界的细胞分裂速度似乎要比的一般的细胞迅速得多:
具体来说,第n天第k个培养皿中会有2k * C(n,k)个细胞(异世界的细胞当然有能力到处跑啦

为了找到活骸化的原因,Shero给出了一个参数m,现在他想知道在第n天对于每一个0<=i<2m,所有下标mod 2m为i的培养皿中的细胞数量总和是多少

输入描述:

第一行两个正整数n,m

输出描述:

设ans[i]表示下标mod 2^m为i的培养皿中的细胞总数一行一个正整数输出 

 mod 998244353的值
示例1

输入

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相关推荐

  1. Wannafly挑战赛14 A-直角三棱锥

    Wannafly挑战赛14 A-直角三棱锥 链接:https://www.nowcoder.com/acm/contest/81/A 来源:牛客网 题目描述 在三维空间中,平面 x = 0, y = ...

  2. Wannafly挑战赛14

    A.直角三棱锥 枚举推式子 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 LL g ...

  3. Wannafly挑战赛14 A 直角三棱锥

    题目描述 在三维空间中,平面 x = 0, y = 0, z = 0,以及平面 x + y + z = K 围成了一个三棱锥. 整天与整数打交道的小明希望知道这个三棱锥内.上整点的数目. 他觉得数量可 ...

  4. 【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 − ...

  5. Wannafly挑战赛14 A:直角三棱锥

    题意: 链接:https://www.nowcoder.com/acm/contest/81/A 来源:牛客网 在三维空间中,平面 x = 0, y = 0, z = 0,以及平面 x + y + z ...

  6. [Wannafly挑战赛2D-Delete]最短路

    [Wannafly挑战赛2D-Delete]最短路 题目描述 给定一张 n 个点,m 条边的带权有向无环图,同时给定起点 S 和终点 T ,一共有 q 个询问,每次询问删掉某个点和所有与它相连的边之后 ...

  7. Wannafly挑战赛19

    Wannafly挑战赛19 A. 队列Q 需要支持把一个元素移到队首,把一个元素移到队尾,移到队首就直接放到队首前面那个位置,原位置标为0,队尾同理. #include <bits/stdc++ ...

  8. Wannafly挑战赛18

    Wannafly挑战赛18 A. 序列 先考虑暴力,相邻两个树之间乘上给定的三种数,递推出下一个位置填什么,然后再check一下,最后一位是否为1即可.这样时间显然不行,但是给我们一种思路,就是中间的 ...

  9. Wannafly挑战赛24

    Wannafly挑战赛24 题目连接 https://www.nowcoder.com/acm/contest/186#question A.石子游戏 题解 注意到当石子个数为偶数的时候,每回合都会减 ...

最新文章

  1. LeetCode-剑指 Offer 53 - I. 在排序数组中查找数字 I
  2. boost::set_union相关的测试程序
  3. CodeForces - 548D Mike and Feet(单调栈)
  4. Java 7和Java 8之间的细微自动关闭合同更改
  5. NVelocity标签设置缓存的解决方案
  6. 计算机科学与技术专业导论_“课程思政”建设经验分享 | 王振武:专业导论(计算机科学与技术)...
  7. Mariadb----字符类型 (五)
  8. 电流电压曲线 vc源码_电瓶修复—充电曲线你知道多少?
  9. iOS底层探索之Block(四)——Block的探索和源码分析
  10. 拓端tecdat|R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数
  11. 面试:Synchronized知识点
  12. HTML5游子吟网页的完整代码,游子吟
  13. Python刷博客简易版
  14. Java类和对象之对象组合之求圆柱体积
  15. 开源H5棋牌 cocos creator微信棋牌小游戏 幼麟棋牌客户端分析笔记
  16. 天使投资AI、风险投资VC、私募股权投资PE、投行IB、FOF、普通合伙人GP、有限合伙人LP、PIPE
  17. Python中字符串转义字符的用法----退格符\b
  18. OpenWrt下使用iperf测试多跳网络性能
  19. JavaScript最详细攻略
  20. 【Linux上分之路】第十二篇:Linux三剑客grep、sed、awk

热门文章

  1. java堆外内存为何比java堆更适合用来进行网络IO操作
  2. 关于libusb-win32开发的经验
  3. android获取有线、wifi、3G(4G)的IP
  4. VB中FSO的调用的两种方法
  5. 不被大神Hinton认同,否定现有同行成果,谷歌这篇烧脑研究最终拿下ICML2019最佳论文...
  6. 如今,进北大要看脸了
  7. 与神经网络相比,你对P图一无所知
  8. Quick Switch Virtual Desktop[AutoHotkey]
  9. bugkuCTF解题记录——5、web基础$_POST
  10. zabbix的trigger