打卡信奥刷题(3199)用C++实现信奥题 P8106 [Cnoi2021] 数学练习
P8106 [Cnoi2021] 数学练习题目背景「Cnoi2021」Cirno’s Easy Round II 热身赛开始了。题目描述为了让选手们重视文化课Cirno 特意加入了一道 Kamishirasawa Keine 老师的数学练习求将一个集合U{1,2,3,⋯ ,n}\texttt{U}\{1,2,3,\cdots,n\}U{1,2,3,⋯,n}划分成两个子集S,TS,TS,T使得∣S∣∉S,∣T∣∉T|S|\notin S,|T|\notin T∣S∣∈/S,∣T∣∈/T的方案数。由于选手都不会高精度所以答案只需要对998244353998244353998244353取模即可。输入格式一行一个整数nnn。输出格式一行一个整数表示答案。输入输出样例 #1输入 #13输出 #12输入输出样例 #2输入 #26输出 #210输入输出样例 #3输入 #365535输出 #3459810767说明/提示样例解释#1: 两种合法的划分方案为{1,3},{2}\{1,3\},\{2\}{1,3},{2}与{2},{1,3}\{2\},\{1,3\}{2},{1,3}。数据范围对于100%100\%100%的数据保证1≤n≤1051 \le n \le 10^51≤n≤105。重收录自 XDUCPC 2021 网络赛 B。C实现#includebits/stdc.h#defineintlonglongusingnamespacestd;constintmod998244353;constintmaxn1e5;intn;intfac[maxn1];intinv[maxn1];intpower(intbase,intfreq,intmod){inttmpbase,ans1;while(freq){if(freq1)ansans*tmp%mod;freq1;tmptmp*tmp%mod;}returnans;}voidinit(){fac[0]1;for(inti1;imaxn;i){fac[i]fac[i-1]*i%mod;}inv[maxn]power(fac[maxn],mod-2,mod);for(intimaxn-1;i0;i--){inv[i]inv[i1]*(i1)%mod;}}intC(intn,intm){if(nm)return0;returnfac[n]*inv[m]%mod*inv[n-m]%mod;}signedmain(){init();cinn;if(n1){cout0endl;return0;}n-2;if(n%20){cout(power(2,n,mod)-C(n,n/2)mod)%mod;}else{coutpower(2,n,mod);}return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2576450.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!