HDU 4994 Revenge of Nim (規律博弈)水
阿新 • • 發佈:2018-12-17
#include<bits/stdc++.h> using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++) #define ll long long #define lrt int l,int r,int rt #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1 #define root l,r,rt const int maxn =1e3+5; const int mod=1e9+7; const int ub=1e6; ll powmod(ll x,ll y){ll t; for(t=1;y;y>>=1,x=x*x%mod) if(y&1) t=t*x%mod; return t;} ll gcd(ll x,ll y){return y?gcd(y,x%y):x;} /* 題目大意:nim遊戲規則變種, 只能按順序取石子。 找找規律,如果第一個數量不是1, 那麼第一個取的人是一定贏的, 因為他可以觀察後面的局勢來決定自己是取完這堆還是繼續取(取的剩下1就行)。 那麼下面的細節就是字首1的問題,簡單判斷下就行,特殊情況考慮到。 */ int n,a[maxn]; int main() { int t;scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } int k=0;while(a[k]==1) k++; if(k&1) { if(k<n) puts("No"); else puts("Yes"); } else { if(k<n) puts("Yes"); else puts("No"); } } return 0; }