比赛 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;
}