A. Accelerator

实质上就是求n个多项式相乘
(a1+x)(a2+x)…(an+x)(a_1+x)(a_2+x)\dots(a_n+x) (a1​+x)(a2​+x)…(an​+x)
对于[xm][x^m][xm]的系数即是从nnn个选出n−mn-mn−m的乘积之和。

每次从nnn个选出n−mn-mn−m的概率显然为
(nm)n!\frac{\binom{n}{m}}{n!} n!(mn​)​

然后期望累加即可。


或者说求
(1+a1x)(1+a2x)…(1+anx)(1+a_1x)(1+a_2x)\dots(1+a_nx) (1+a1​x)(1+a2​x)…(1+an​x)
对于[xm][x^m][xm]的系数即是从nnn个选出mmm的乘积之和。

#include<bits/stdc++.h>using namespace std;
using ll=long long;const int N=300010;
const int P=998244353;
const int G=3,Gi=332748118;
const int mod=998244353;int qmi(int a,int b)
{int v=1;while(b){if(b&1) v=1ll*v*a%P;a=1ll*a*a%P;b>>=1;}return v;
}
int rev[N];
void NTT(int *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){int Wn=qmi((inv==1)?G:Gi,(P-1)/(mid<<1));for(int i=0;i<n;i+=(mid<<1)){int w=1;for(int j=0;j<mid;j++,w=1ll*w*Wn%P){int x=a[i+j],y=1ll*w*a[i+j+mid]%P;a[i+j]=(x+y)%P;a[i+j+mid]=(x-y+P)%P;}}}if(inv==-1) {int invn=qmi(n,P-2);for(int i=0;i<n;i++) a[i]=1ll*a[i]*invn%P;}
}
//=======================================================
int fact[N],infact[N];
void init()
{fact[0]=1;for(int i=1;i<=100000;i++) fact[i]=1ll*i*fact[i-1]%mod;infact[100000]=qmi(fact[100000],mod-2);for(int i=99999;i;i--) infact[i]=1ll*infact[i+1]*(i+1)%mod;
}
int n,A[N],B[N],C[N];
int Mul(int *a,int *b,int n,int m,int *ans)
{int bit=0,num=1;while(num<n+m+1) 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<=n;i++) A[i]=a[i];for(int i=0;i<=m;i++) B[i]=b[i];for(int i=n+1;i<num;i++) A[i]=0;for(int i=m+1;i<num;i++) B[i]=0;NTT(A,num,1);NTT(B,num,1);for(int i=0;i<num;i++) C[i]=1ll*A[i]*B[i]%mod;NTT(C,num,-1);for(int i=0;i<=n+m;i++) ans[i]=C[i];return n+m;
}int pool[N<<1],tot;
struct Node
{int *p,n;void init(int x){this->n=1;p=pool+tot;for(int i=0;i<=n;i++) p[i]=0;p[0]=x;p[1]=1;tot+=n+1;}void mul(const Node&o){n=Mul(p,o.p,n,o.n,p);}
};
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);init();int Tc;cin>>Tc;while(Tc--){cin>>n;Node res=solve(1,n);ll ans=0;for(int i=1;i<=n;i++)ans=(ans+1ll*res.p[n-i]*fact[i]%mod*fact[n-i]%mod)%mod;ans=ans*infact[n]%mod;printf("%lld\n",ans);}return 0;}

The 2020 ICPC Asia Macau Regional Contest A. Accelerator(分治+NTT)相关推荐

  1. 并查集 ---- 扩展域并查集判二分图 + 循环模拟字典树 The 2020 ICPC Asia Macau Regional Contest C. Club Assignment (详解)

    题目链接 题目大意: 有n个数,现在要把他们拆分成两个集合,假设S为集合,有如下定义: f(S)={min(x⊕y)∣x,y∈S,andx!=y}f(S)=\{min(x\oplus y)|x,y\i ...

  2. The 2020 ICPC Asia Macau Regional Contest J. Jewel Grab(数颜色+链表)

    J. Jewel Grab Tartarus _Wallace_ 转化询问:对于一个询问 [s,k],找到一个最长的区间 [s,t],满足区间中出现次数超过一次的元素,的出现次数减一,的和,不超过 k ...

  3. The 2020 ICPC Asia Macau Regional Contest

    文章目录 前言 D.Artifacts F. Fixing Networks L. Random Permutation 总结 前言 vp D.Artifacts 题意:阅读理解,字符串中提取出来对应 ...

  4. The 2020 ICPC Asia Shenyang Regional Programming Contest I题 Rise of Shadows(数论)

    题目链接The 2020 ICPC Asia Shenyang Regional Programming Contest 题目大意: 一天内有H小时,每小时M分钟,时针分针以恒定速率旋转. 现在若时针 ...

  5. The 2020 ICPC Asia Yinchuan Regional Programming Contest

    The 2020 ICPC Asia Yinchuan Regional Programming Contest A 开三个vector数组存储x,y,z轴上的点,unique+erase去重 #in ...

  6. The 2019 ICPC Asia Shanghai Regional Contest

    The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...

  7. 2018 ICPC Asia Jakarta Regional Contest

    2018 ICPC Asia Jakarta Regional Contest 题号 题目 知识点 难度 A Edit Distance B Rotating Gear C Smart Thief D ...

  8. 【题目记录】——The 2021 ICPC Asia Jinan Regional Contest

    文章目录 C Optimal Strategy 组合数 H Game Coin K Search For Mafuyu 欧拉序列 题目集地址 The 2021 ICPC Asia Jinan Regi ...

  9. 2019-2020 ICPC Asia Xuzhou Regional Contest【徐州现场赛】

    题目: 209-2020 ICPC Asia Xuzhou Regional Onsite Contest E. Multiply 题意: 找到最大的 i 使得 z*x^i 是 y! 的因子 分析: ...

最新文章

  1. struct_config.xml中action/set-property标签的用法
  2. 11g compression 新特性(1)
  3. 数据结构应用实例#栈#迷宫寻路
  4. mac+php7+mysql.so_在Mac上编译安装PHP7的开发环境
  5. php中控车牌识别push协议,车牌识别一体机的RS485小接口——实现透明传输!
  6. Error starting userland proxy: listen tcp 0.0.0.0:5601: bind: address already in use
  7. mysql 取出全部数据库_php取出mysql数据库中所有数据
  8. TCP 和 UDP 绑定同一端口通信的解释
  9. css限制单行文本输入,超出部分使用...替换
  10. java犀牛是什么意思_深入浅出Rhino:Java与JS互操作
  11. Nginx禁止直接通过IP地址访问网站以及限制IP登陆某目录(关闭默认站点或空主机头)...
  12. 小米有品员工签军令状,自动放弃年终奖!
  13. 每日一题_36. 有效的数独
  14. java后台导出word文档正文、表格、图片
  15. 贝叶斯分类器(贝叶斯决策论,极大似然估计,朴素贝叶斯分类器,半朴素贝叶斯分类器,贝叶斯网)学习笔记
  16. Android相机对焦问题
  17. 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
  18. 街头智慧:罗杰斯的投资与人生
  19. 集成运算放大器的线性应用(模电速成)
  20. 腹直肌整体(05):仰卧屈膝两头起

热门文章

  1. java定义构造方法_JAVA基础学习之路(三)类定义及构造方法
  2. mvn 打包可执行包_用Maven打包发布可执行的jar包
  3. java虚拟机工作原理图_Java虚拟机工作原理
  4. 香肠派对电脑版_香肠派对先行服s7赛季下载-香肠派对先行服s7赛季最新版下载...
  5. java超长字符序列化_String 字符串最长可以有多长?
  6. php sorcket_PHP: Sockets - Manual
  7. groovy 字符串截取最后一个_Python入门高级教程--Python 字符串
  8. 机器学习之数据集划分——训练集测试集划分,划分函数,估计器的使用
  9. 敲黑板!vue3重点!一文了解Composition API新特性:ref、toRef、toRefs
  10. [mybatis]映射文件_select_返回集合(List,Map)