我也不知道为什么枚举vis必须加上一个边界才能A
以后还是都加上吧
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int N=;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int n,m,f[N];
bool vis[N];
#define me(x) ( x<0 ? 0 : f[x] )
int main(){
n=read();
for(int i=;i<=n;i++){
memset(vis,,sizeof(vis));
for(int j=;j<=i;j++) vis[ me(j-)^me(i-j-) ]=;
for(int j=;j<=i;j++) if(!vis[j]) {f[i]=j; break;}
//printf("f %d %d\n",i,f[i]);
}
puts(f[n] ? "" : "");
}