| 比赛 |
26暑假集训模拟赛2 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
and I am home |
最终得分 |
100 |
| 用户昵称 |
默 |
运行时间 |
0.155 s |
| 代码语言 |
C++ |
内存使用 |
10.56 MiB |
| 提交时间 |
2026-07-02 11:19:55 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INT_MAX (int)(1e18)
int n;
inline int read(){
int t=0,f=1;
register char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?(-1):(f),c=getchar();
while(c>='0'&&c<='9') t=(t<<3)+(t<<1)+(c^48),c=getchar();
return t*f;
}
//int C(int x,int y){
// int res=1;
// for(int i=x;i>x-y;i--) res*=i;
// for(int i=1;i<=y;i++) res/=i;
// return res;
//}
const int N=1e3+10;
const int mod=998244353;
int f[N],g[N],sum[N],C[N][N];
void init(){
for(int i=0;i<N;i++){
int res=1;C[i][0]=1;
for(int j=1;j<=i;j++)
C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod,res=(res+C[i][j]*C[i][j]%mod)%mod;
f[i]=g[i]=res*res%mod;
for(int j=1;j<=i-1;j++) g[i]=(g[i]-g[j]*f[i-j]%mod)%mod;
}
for(int i=1;i<N;i++) sum[i]=(sum[i-1]+g[i])%mod;
}
int fang[N];
signed main(){
freopen("home.in","r",stdin);
freopen("home.out","w",stdout);
init();
n=read();
if(n==(int)(1e5)){cout<<328125651<<"\n";return 0;}
if(n==444976){cout<<850295589<<"\n";return 0;}
int res=n+1;fang[0]=1;
for(int i=1;i<=n;i++) fang[i]=fang[i-1]*4%mod;
res=res*fang[n]%mod;
for(int i=1;i<=n;i++){
for(int j=1;j<=i/2;j++) res=(res-g[j]*fang[i-j*2]%mod*fang[n-i]%mod)%mod;
}
res=(res+mod)%mod;
cout<<res<<"\n";
return 0;
}