Yiwen with Formula

溢流眼泪题解
生成函数化成n个多项式乘积,然后分治把他们依次相乘,需要由于指数需要modϕ(998244353)=998244353−1\bmod \phi(998244353)=998244353-1modϕ(998244353)=998244353−1,因此需要任意模数的FFT。。。

常数贼大跑不过去

#include<bits/stdc++.h>using namespace std;
using ll=long long;const int N=400010;
const long double PI=acos(-1);
const int mod=998244353;
struct Complex
{long double r,i;Complex operator+(const Complex &o) const{return{r+o.r,i+o.i};}  Complex operator-(const Complex &o) const{return{r-o.r,i-o.i};}  Complex operator*(const Complex &o) const{return{r*o.r-i*o.i,r*o.i+i*o.r};}  Complex operator*(const long double  &o) const{return{r*o,i*o};}Complex conj(){return {this->r,-this->i};}
}a0[N],a1[N],b0[N],b1[N];
const Complex I={0,1};
int n,m;
int rev[N];
void FFT(Complex *a,int n,int inv)
{for(int i=0;i<n;i++) if(i<rev[i]) swap(a[i],a[rev[i]]);for(int mid=1;mid<n;mid<<=1){Complex Wn=Complex({cos(PI/mid),inv*sin(PI/mid)});for(int i=0;i<n;i+=mid*2){Complex w=Complex({1,0});for(int j=0;j<mid;j++,w=w*Wn){Complex x=a[i+j],y=w*a[i+j+mid];a[i+j]=x+y,a[i+j+mid]=x-y;}}}if(inv==-1) for(int i=0;i<N;i++) a[i].r/=n,a[i].i/=n;
}
void DFFT(Complex *a,Complex *b,int n)
{for(int i=0;i<n;i++) a[i]=a[i]+I*b[i];FFT(a,n,1);for(int i=0;i<n;i++) b[i]=a[i?n-i:0].conj();for(int i=0;i<n;i++){Complex p=a[i],q=b[i];a[i]=(p+q)*0.5;b[i]=(q-p)*0.5*I;}
}
Complex p[N],q[N];ll f(long double x,int mod) {return (x<0)?((ll(x-0.5)+mod)%mod):(ll(x+0.5)%mod);}
int MTT(int *a,int *b,int n,int m,int *ans,int mod)
{const int M=sqrt(mod)+1;int bit=0,num;while((1<<bit)<n+m+1) bit++;num=1<<bit;for(int i=0;i<num;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(bit-1));for(int i=0;i<num;i++) a0[i]=a1[i]=b0[i]=b1[i]={0,0};for(int i=0;i<=n;i++) a0[i].r=a[i]/M,a1[i].r=a[i]%M;for(int i=0;i<=m;i++) b0[i].r=b[i]/M,b1[i].r=b[i]%M;DFFT(a0,a1,num);DFFT(b0,b1,num);for(int i=0;i<num;i++){p[i]=a0[i]*b0[i]+I*a1[i]*b0[i];q[i]=a0[i]*b1[i]+I*a1[i]*b1[i];}FFT(p,num,-1);FFT(q,num,-1);for(int i=0;i<=n+m;i++){ll a=f(p[i].r,mod);ll b=f(p[i].i,mod);ll c=f(q[i].r,mod);ll d=f(q[i].i,mod);ans[i]=(int)((1ll*M*M*a%mod+1ll*M*(b+c)%mod+d)%mod);}return n+m;
}
//=======================================================================
ll qmi(ll a,ll b)
{ll v=1;while(b){if(b&1) v=v*a%mod;b>>=1;a=a*a%mod;}return v;
}
int pool[N],tot;
struct Node
{int *p,n;void init(int n){this->n=n;p=pool+tot;for(int i=0;i<=n;i++) p[i]=0;p[0]++;p[n]++;tot+=n+1;}void mul(const Node&o){n=MTT(p,o.p,n,o.n,p,mod-1);}
};
Node solve(int l,int r)
{Node ans;if(l==r){int x;cin>>x;ans.init(x);return ans;}int mid=l+r>>1;ans=solve(l,mid);ans.mul(solve(mid+1,r));return ans;
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int Tc;cin>>Tc;while(Tc--){tot=0;int n;cin>>n;Node res=solve(1,n);if(res.p[0]>1) cout<<"0\n";else{ll ans=1;for(int i=1;i<=res.n;i++) ans=ans*qmi(i,res.p[i])%mod;cout<<ans<<'\n';}}return 0;
}

2021“MINIEYE杯”中国大学生算法设计超级联赛(7)Yiwen with Formula(任意模数FFT)相关推荐

  1. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(3)签到题3题

    2021"MINIEYE杯"中国大学生算法设计超级联赛(3) Start Time : 2021-07-27 12:00:00 End Time : 2021-07-27 17:0 ...

  2. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(1)签到题15869

    2021"MINIEYE杯"中国大学生算法设计超级联赛(1) Start Time : 2021-07-20 12:10:00 End Time : 2021-07-20 17:1 ...

  3. 2021“MINIEYE杯”中国大学生算法设计超级联赛

    2021"MINIEYE杯"中国大学生算法设计超级联赛 1006 Given a sequence of integers of length n, find the shorte ...

  4. 2021“MINIEYE杯”中国大学生算法设计超级联赛(2)

    2021"MINIEYE杯"中国大学生算法设计超级联赛(2) 1008 I love exam (类背包DP) 1010 I love permutation (数学构造,剩余系) ...

  5. 7068 Dota2 Pro Circuit 杭电多校(2021“MINIEYE杯”中国大学生算法设计超级联赛9) [贪心+双指针]

    题目 Dota2 Pro Circuit *Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Oth ...

  6. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(5)签到题4题

    Solved Pro.ID Title Ratio(Accepted / Submitted) 1001 Miserable Faith 33.33%(19/57) 1002 String Mod 2 ...

  7. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(8)

    1006 GCD Game (博弈论,nim游戏,质因子个数) 题意:有n个数a1,a2....an两个人玩游戏,Alice先动,Bob后动每次可以将一个数变为他的因子,直到不能动就输了. 题解:将问 ...

  8. 2021“MINIEYE杯”中国大学生算法设计超级联赛(1)个人解题报告

    文章目录 HDU6950 Mod, Or and Everything HDU6954 Minimum spanning tree HDU6958 KD-Graph HDU6957 Maximal s ...

  9. 2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)

    前言 依旧是白嫖账号,只打了一些题/kk 正题 1002 Buying Snacks 题目大意 nnn个物品,每个可以买一次也可以不买,如果买需要选择1/21/21/2块钱的,然后也可以相邻两个一起买 ...

  10. 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)部分题解

    前言 找大佬嫖到个号来划水打比赛了,有的题没写或者不是我写的就不放了. 目前只有:1004,1005,1007,1008,1011 正题 题目链接:https://acm.hdu.edu.cn/con ...

最新文章

  1. 肝货,详解 tkinter 图形化界面制作流程!
  2. Linux下如何执行Shell脚本
  3. Linux C编程--操作文件结束和错误的判断方法(函数)
  4. python快速写入hbase_Python生成HBase 10w+ 条数据说明
  5. 【iCore2 双核心板视频教程一】iM_LAN 100M 以太网模块UDP例程(包含视频教程)
  6. 【LeetCode】按 tag 分类索引 (900题以下)
  7. springboot多环境切换
  8. Hdu 1496 Equations
  9. JavaSE03: Arrays工具类的使用及简单数组算法
  10. 最新全开源烟雨简约要饭系统网站源码在线
  11. DELL PERC-10和 PERC-9阵列卡支持的操作系统版本
  12. 开源GIS--geos实现空间连接
  13. 登录到接受邮件服务器,使用outlook2016配置imap 登陆到接收服务器(imap) 失败
  14. 计算机 64虚拟内存设置方法,计算机虚拟内存怎样设置
  15. DOS中使用扩展内存与XMS操作库设计
  16. 三、C语言常用的库函数
  17. 梯度下降原理(SGD,Adam,BGD,momentum,Adagrad,NAG)
  18. Snyk安全漏洞扫描使用记录
  19. 软件工程就业方向及前景
  20. 用python写一个文件去重

热门文章

  1. c语言四个数找大wxyz,2015年计算机二级《C语言》考试上机测试题(7)
  2. word2vec原理_word2vec论文阅读笔记
  3. mysql 错误 0152_SP2-1503 SP2-0152 错误解决
  4. 双离合档把上按钮作用_英特尔展示双屏幕概念笔记本:带有双铰链
  5. b+树时间复杂度_第15期:索引设计(索引组织方式 B+ 树)
  6. Java 实例 - 队列(Queue)用法
  7. [JS-DOM]核心DOM模型(Document,Element,Node)
  8. C++ 多态实现的三个条件
  9. JAVA JFrame编程
  10. 编程 音量键_盘点市面上那些千元级高逼格的键盘 灯光炫酷 多宏编程