https://www.luogu.org/blog/user50971/solution-p5401

  1. #include<cstdio>
  2. #include<algorithm>
  3. #define rep(i,l,r) for (int i=(l); i<=(r); i++)
  4. using namespace std;
  5.  
  6. const int N=,mod=,i2=;
  7. int D,n,m,ans,fac[N],inv[N],ip2[N],f[N],g[N],rev[N],a[N],b[N];
  8.  
  9. int ksm(int a,int b){
  10. int res=;
  11. for (; b; a=1ll*a*a%mod,b>>=)
  12. if (b & ) res=1ll*res*a%mod;
  13. return res;
  14. }
  15.  
  16. int C(int n,int m){ return n<m ? : 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod; }
  17.  
  18. void NTT(int a[],int n,bool f){
  19. for (int i=; i<n; i++) if (i<rev[i]) swap(a[i],a[rev[i]]);
  20. for (int i=; i<n; i<<=){
  21. int wn=ksm(,f?(mod-)/(i<<):(mod-)-(mod-)/(i<<));
  22. for (int p=i<<,j=; j<n; j+=p){
  23. int w=;
  24. for (int k=; k<i; k++,w=1ll*w*wn%mod){
  25. int x=a[j+k],y=1ll*w*a[i+j+k]%mod;
  26. a[j+k]=(x+y)%mod; a[i+j+k]=(x-y+mod)%mod;
  27. }
  28. }
  29. }
  30. if (f) return;
  31. int inv=ksm(n,mod-);
  32. for (int i=; i<n; i++) a[i]=1ll*a[i]*inv%mod;
  33. }
  34.  
  35. int main(){
  36. freopen("pearl.in","r",stdin);
  37. freopen("pearl.out","w",stdout);
  38. scanf("%d%d%d",&D,&n,&m);
  39. if (n-*m<){ puts(""); return ; }
  40. if (n-*m>=D){ printf("%d\n",ksm(D,n)); return ; }
  41. fac[]=ip2[]=;
  42. rep(i,,D) fac[i]=1ll*fac[i-]*i%mod,ip2[i]=1ll*ip2[i-]*i2%mod;
  43. inv[D]=ksm(fac[D],mod-);
  44. for (int i=D; i; i--) inv[i-]=1ll*inv[i]*i%mod;
  45.  
  46. int l=,L=,t=;
  47. while (l<=(D<<)) l<<=,L++;
  48. for (int i=; i<l; i++) rev[i]=(rev[i>>]>>)|((i&)<<(L-));
  49. rep(i,,D) a[i]=1ll*t*ksm(D-*i+mod+mod,n)%mod*inv[i]%mod,b[i]=inv[i],t=mod-t;
  50. NTT(a,l,); NTT(b,l,);
  51. for (int i=; i<l; i++) a[i]=1ll*a[i]*b[i]%mod;
  52. NTT(a,l,);
  53. rep(i,,D) f[i]=1ll*ip2[i]*fac[i]%mod*C(D,i)%mod*a[i]%mod;
  54. for (int i=; i<l; i++) a[i]=b[i]=;
  55.  
  56. t=(D&)?mod-:;
  57. rep(i,,D) a[i]=1ll*f[i]*fac[i]%mod,b[i]=1ll*t*inv[D-i]%mod,t=mod-t;
  58. NTT(a,l,); NTT(b,l,);
  59. for (int i=; i<l; i++) a[i]=1ll*a[i]*b[i]%mod;
  60. NTT(a,l,);
  61. rep(i,,D) g[i]=1ll*a[D+i]*inv[i]%mod;
  62. rep(i,,n-*m) ans=(ans+g[i])%mod;
  63. printf("%d\n",ans);
  64. return ;
  65. }

[LOJ#3120][Luogu5401][CTS2019]珍珠(容斥+生成函数)的更多相关文章

  1. LOJ3120. 「CTS2019」珍珠 [容斥,生成函数]

    传送门 思路 非常显然,就是要统计有多少种方式使得奇数的个数不超过\(n-2m\).(考场上这个都没想到真是身败名裂了--) 考虑直接减去钦点\(n-2m+1\)个奇数之后的方案数,但显然这样会算重, ...

  2. Luogu5401 CTS2019珍珠(生成函数+容斥原理+NTT)

    显然相当于求有不超过n-2m种颜色出现奇数次的方案数.由于相当于是对各种颜色选定出现次数后有序排列,可以考虑EGF. 容易构造出EGF(ex-e-x)/2=Σx2k+1/(2k+1)!,即表示该颜色只 ...

  3. bzoj3771: Triple(容斥+生成函数+FFT)

    传送门 咳咳忘了容斥了-- 设\(A(x)\)为斧头的生成函数,其中第\(x^i\)项的系数为价值为\(i\)的斧头个数,那么\(A(x)+A^2(x)+A^3(x)\)就是答案(于是信心满满的打了一 ...

  4. 【洛谷5644】[PKUWC2018] 猎人杀(容斥+生成函数+分治NTT)

    点此看题面 大致题意: 有\(n\)个人相互开枪,每个人有一个仇恨度\(a_i\),每个人死后会开枪再打死另一个还活着的人,且第一枪由你打响.设当前剩余人仇恨度总和为\(k\),则每个人被打中的概率为 ...

  5. 5.15 省选模拟赛 容斥 生成函数 dp

    LINK:5.15 T2 个人感觉生成函数更无脑 容斥也好推的样子. 容易想到每次放数和数字的集合无关 所以得到一个dp f[i][j]表示前i个数字 逆序对为j的方案数. 容易得到转移 使用前缀和优 ...

  6. [CTS2019]珍珠(NTT+生成函数+组合计数+容斥)

    这题72分做法挺显然的(也是我VP的分): 对于n,D<=5000的数据,可以记录f[i][j]表示到第i次随机有j个数字未匹配的方案,直接O(nD)的DP转移即可. 对于D<=300的数 ...

  7. @loj - 3120@ 「CTS2019 | CTSC2019」珍珠

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 有 \(n\) 个在范围 \([1, D]\) 内的整数均匀随机 ...

  8. [JSOI2019]神经网络(树形DP+容斥+生成函数)

    首先可以把题目转化一下:把树拆成若干条链,每条链的颜色为其所在的树的颜色,然后排放所有的链成环,求使得相邻位置颜色不同的排列方案数. 然后本题分为两个部分:将一棵树分为1~n条不相交的链的方案数:将这 ...

  9. LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠

    题目传送门:LOJ #3120. 题意简述: 称一个长度为 \(n\),元素取值为 \([1,D]\) 的整数序列是合法的,当且仅当其中能够选出至少 \(m\) 对相同元素(不能重复选出元素). 问合 ...

随机推荐

  1. CF1172E Nauuo and ODT

    CF1172E Nauuo and ODT 神仙题orz 要算所有路径的不同颜色之和,多次修改,每次修改后询问. 对每种颜色\(c\)计算多少条路径包含了这个颜色,不好算所以算多少条路径不包含这个颜色 ...

  2. Android入门教程(八)

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号  欢迎大家关注我的微信公众号:「醉翁猫咪」 今天讲讲安卓入门(八),讲讲Android的简介,如何搭建An ...

  3. 【POJ1573】Robot Motion

    题目传送门 本题知识点:模拟 本题的题意也很简单. 给出一个矩阵,矩阵里面有着东南西北(上下左右)的指示,当机器人走到上面时则会按照指示前进.机器人每次都从最上面一行的某一列进入. 需要判断的是机器人 ...

  4. 【CSP模拟赛】starway(玄学建边 最小生成树)

    问題描述 小w伤心的走上了 Star way to heaven.   到天堂的道路是一个笛卡尔坐标系上一个n×m的长方形通道(顶点在(0,0))和(n,m)),小w从最左边任意一点进入,从右边任意一 ...

  5. SSH框架整合3——原生态SessionFactory

    ================================================web.xml============================================= ...

  6. 刷题记录:[XNUCA2019Qualifier]EasyPHP

    目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...

  7. 如何在IDEA上配置Maven

    IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的Java开发工具之一, IDEA是JetBrains公司的产品,现在有逐步取代老牌Java ...

  8. win7下查看进程端口

    一. 查看所有进程占用的端口 在开始-运行-cmd,输入:netstat –ano 可以查看所有进程 二.查看占用指定端口的程序 当你在用tomcat发布程序时,经常会遇到端口被占用的情况,我们想知道 ...

  9. ArcGIS 要素类整体平移工具-arcgis/arcpy/模型构建器案例实习教程

    ArcGIS 要素类整体平移工具-arcgis/arcpy/模型构建器案例实习教程 联系方式:谢老师,135-4855_4328,xiexiaokui#qq.com 目的:对整个要素类,按指定偏移距离 ...

  10. nginx-rtmp

    最近使用ffmpeg推流为rtmp,进行直播.记录一下nginx-rtmp的配置.因为我们要添加ngin-rtmp模块,所以不能直接apt安装. 下载niginx和nginx-rtmp-module的 ...