hdu 3389 阶梯博弈

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\n";
    else cout<<"Bob\n";
  }
}

猜你喜欢

转载自www.cnblogs.com/nervendnig/p/11644484.html
今日推荐