結果
問題 | No.2814 Block Game |
ユーザー |
|
提出日時 | 2024-07-19 23:01:19 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 56 ms / 2,000 ms |
コード長 | 1,621 bytes |
コンパイル時間 | 596 ms |
コンパイル使用メモリ | 67,072 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-19 23:01:25 |
合計ジャッジ時間 | 4,392 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 20 |
ソースコード
#include<iostream>#include<cassert>using namespace std;int memo[500][500][500][2];bool dfs(int ev,int od,int p0,int p1,int cur,int t,string S){assert(ev+od==p0+p1);if(ev+od==0){if((cur==1)==(S=="Odd")){//Alice winreturn t==0;}else{return t==1;}}if(memo[ev][od][p0][cur]!=0)return memo[ev][od][p0][cur]>0;bool win=false;if(ev>0){if(p0>0){if(!dfs(ev-1,od,p0-1,p1,cur,!t,S))win=true;}if(p1>0){if(!dfs(ev-1,od,p0,p1-1,cur,!t,S))win=true;}}if(od>0){if(p0>0){if(!dfs(ev,od-1,p0-1,p1,cur,!t,S))win=true;}if(p1>0){if(!dfs(ev,od-1,p0,p1-1,cur^1,!t,S))win=true;}}memo[ev][od][p0][cur]=win?1:-1;return win;}bool naive(int n,string S){int ev=0,od=0,p0=0,p1=0;for(int i=1;i<=n;i++){if(i%2==1)od++;else ev++;}for(int i=0;i<=n-1;i++){if((i&n-1)==i)p1++;else p0++;}for(int i=0;i<=ev;i++)for(int j=0;j<=od;j++)for(int k=0;k<=p0;k++){memo[i][j][k][0]=0;memo[i][j][k][1]=0;}return dfs(ev,od,p0,p1,0,0,S);}bool f(long N,string S){if(__builtin_popcountll(N)==1){if(N==1||N==2)return S=="Odd";else return S=="Even";}else{return N%2==1;}}int main(){ios::sync_with_stdio(false);cin.tie(nullptr);/*for(int n=1;n<=100;n++){bool e=naive(n,"Even");bool o=naive(n,"Odd");if(e==o){assert(n%2?e:!e);//continue;}//cout<<n<<" "<<e<<" "<<o<<endl;assert(naive(n,"Even")==f(n,"Even"));assert(naive(n,"Odd")==f(n,"Odd"));}*/int T;cin>>T;for(;T--;){long N;string S;cin>>N>>S;cout<<(f(N,S)?"Alice\n":"Bob\n");}}