CodeForces - 768E Game of Stones —— nim博弈變種
阿新 • • 發佈:2018-11-12
題意:
在石堆中取石子,每次在一堆中取任意個,但是不能取這堆石子以前被取過的數量
思路:
nim的變形,求出每堆石子最多能被取多少次(依次取1個2個3個等),異或起來即可
這裡的1個2個3個就相當於nim博弈裡的每堆石子的1
#include <iostream> #include <cstdio> #include <cmath> #include <vector> #include <map> #include <set> #include <stack> #include <queue> #include <string> #include <cstring> #include <algorithm> using namespace std; #define ll long long #define max_ 200100 #define mod 1000000007 #define inf 0x3f3f3f3f #define eps 1e-9 int n; int num[60]; int main(int argc, char const *argv[]) { num[1]=1; int tot; for(tot=2;;tot++) { num[tot]=num[tot-1]+tot; if(num[tot]>60) break; } int ans=0; scanf("%d",&n); for(int i=1;i<=n;i++) { int x; scanf("%d",&x); int k=upper_bound(num+1,num+1+tot,x)-num-1; ans^=k; } if(ans) printf("NO\n"); else printf("YES\n"); return 0; }