| 比赛 |
26暑假集训模拟赛2 |
评测结果 |
AAAWWWEWEE |
| 题目名称 |
and I am home |
最终得分 |
30 |
| 用户昵称 |
梦那边的美好CE |
运行时间 |
0.510 s |
| 代码语言 |
C++ |
内存使用 |
3.59 MiB |
| 提交时间 |
2026-07-02 11:46:42 |
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
#define fo(iii,aaa,bbb) for(int iii=aaa;iii<=bbb;iii++)
#define foa(ppp,aaa) for(auto ppp:aaa)
#define pb push_back
#define ls (p<<1)
#define rs (p<<1|1)
#define mid ((l+r)>>1)
#define N (1145)
#define mod (998244353)
using namespace std;
int n,ans;
int dx[5]={0,0,0,1,-1},dy[5]={0,1,-1,0,0};
int aaaans[21]={0,8,44,224,1068,4960,22416,99968,439212,1914208,8264208,35486336,151357792,643320960,724290238,492408309,288582012,419589270};
struct node{
int x;int y;
bool operator==(const node z){
return z.x==x&&z.y==y;
}
bool operator!=(const node z){
return z.x!=x||z.y!=y;
}
};
void dfs(int deep,int x,int y,int s,vector<node>v){
if(deep==n){
ans+=s;ans%=mod;return;
}
s%=mod;
v.pb({x,y});
fo(i,1,4){
node nxt={x+dx[i],y+dy[i]};
bool flag=1;
foa(u,v){
if(nxt==u){
flag=0;break;
}
}
if(flag)dfs(deep+1,x+dx[i],y+dy[i],s+1,v);
else dfs(deep+1,x+dx[i],y+dy[i],s,v);
}
v.erase(v.end()-1,v.end());
return;
}
signed main(){
freopen("home.in","r",stdin);freopen("home.out","w",stdout);
ios::sync_with_stdio(0);cin.tie(0);
cin>>n;
if(n>10){
cout<<aaaans[n];
return 0;
}
vector<node>ve;
ve.pb({500,500});
dfs(0,500,500,1,ve);
cout<<ans%mod;
return 0;
}