NC17352. Exam
描述
输入描述
第一行一个正整数n。
1 ≤ n ≤1,000,000
输出描述
输出满足只有一个学校发了喜报的可能性的种数对998,244,353取模后的值。
示例1
输入:
2
输出:
4
C++14(g++5.4) 解法, 执行用时: 77ms, 内存消耗: 19424K, 提交时间: 2018-08-02 10:37:40
#include<cstdio> using namespace std; int n,i,fac[2000005],inv[2000005],ans=0,p2[1000005]; const int mod=998244353; int pow(int a,int b) { int ans=1; while(b) { if(b&1)ans=1LL*ans*a%mod; a=1LL*a*a%mod; b>>=1; } return ans; } int main() { scanf("%d",&n); fac[0]=1; for(i=1;i<=2*n;i++)fac[i]=1LL*fac[i-1]*i%mod; inv[2*n]=pow(fac[2*n],mod-2); for(i=2*n-1;i>=0;i--)inv[i]=1LL*inv[i+1]*(i+1)%mod; p2[0]=1; for(i=1;i<=n;i++)p2[i]=1LL*p2[i-1]*2%mod; p2[n]=pow(p2[n],mod-2); for(i=n-1;i>=0;i--)p2[i]=1LL*p2[i+1]*2%mod; for(i=0;i<n;i++)ans=(ans+1LL*fac[2*n-2-i]*inv[n-1-i]%mod*p2[n-1-i])%mod; ans=1LL*ans*n%mod*fac[n-1]%mod; printf("%d\n",ans); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 15ms, 内存消耗: 388K, 提交时间: 2018-07-31 17:47:30
#include<cstdio> const int mod=998244353; int main(){ int n,ans=1;scanf("%d",&n); for(int i=2;i<=n;i++)ans=1ll*ans*i%mod*(i*2-2)%mod; printf("%d\n",ans); }