http://acm.hdu.edu.cn/showproblem.php?pid=3389
暴力建图 跑阶梯博弈
#include<iostream> #include<algorithm> #define ll long long #define rep(ii,a,b) for(int ii=a;ii<=b;++ii) #define per(ii,a,b) for(int ii=b;ii>=a;--ii) #define forn(i,x,g,e) for(int i=g[x];i;i=e[i].next) #define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) #define ull unsigned long long #define fi first #define se second #define mp make_pair #define pii pair<ll,ll> #define all(x) x.begin(),x.end() #define show(x) cout<<#x<<"="<<x<<endl #define showa(a,b) cout<<#a<<'['<<b<<"]="<<a[b]<<endl #define show2(x,y) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl #define show3(x,y,z) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl #define show4(w,x,y,z) cout<<#w<<"="<<w<<" "<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl #define show5(v,w,x,y,z) cout<<#v<<"="<<v<<" "<<#w<<"="<<w<<" "<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl #define showa2(x,a,b) cout<<#x<<": ";rep(i,a,b) cout<<x[i]<<' ';cout<<endl using namespace std;//head const int maxn=1e5+10,maxm=2e6+10; const ll INF=0x3f3f3f3f,mod=1e9+7; int casn,n,m,k,kase; int a[maxn],fa[maxn],d[maxn],vis[maxn]; void init(){ rep(i,1,1e4){ for(int j=i+1;j<=1e4;j+=2) { if((j+i)%3==0){ fa[j]=i; d[j]=d[i]+1; } } } } int main() {IO; cin>>casn; init(); while(casn--){ cin>>n; fill_n(vis,n+1,0); rep(i,1,n) cin>>a[i]; int sum=0; per(i,1,n){ if(vis[i]) continue; int now=i,flag=0; while(now!=0){ if(d[now]%2==1) flag^=a[now]; vis[now]=1; now=fa[now]; } sum^=flag; } cout<<"Case "<<++kase<<": "; if(sum) cout<<"Alice "; else cout<<"Bob "; } }