1. 程式人生 > >2018.11.07【POJ1740】A New Stone Game(階梯博弈)(模仿策略)

2018.11.07【POJ1740】A New Stone Game(階梯博弈)(模仿策略)

傳送門


解析:

首先,題目沒有說勝利判定方式啊,我去討論區看到勝利方式是拿走最後一顆石子。

這個博弈的主要策略是模仿。

每一方只需要保證對方有辦法可動的時候自己也有辦法可動就行了。

所以先手必敗的局面就是,有偶數堆石頭,並且每種大小的堆存在偶數個,因為只有這個時候,後手才始終能夠模仿先手的做法。

如果有奇數堆石頭,先手直接操作總數最大的一堆石頭,總是能夠轉移到上述局面。如果有偶數堆石頭但是每種大小的堆不是存在偶數個,也總是存在方案轉移到上述情況。

判斷一下就好了。


程式碼:

#include<cstdio>
#include
<cctype>
#include<algorithm> using namespace std; #define ll long long #define re register #define gc getchar #define pc putchar #define cs const inline int getint(){ re int num; re char c; while(!isdigit(c=gc()));num=c^48; while(isdigit(c=gc()))num=(num<<1)+(num<<3)+(c^
48); return num; } int n; int a[11]; signed main(){ while(n=getint()){ for(int re i=1;i<=n;++i)a[i]=getint(); if(n&1){ puts("1"); continue; } sort(a+1,a+n+1); bool flag=0; for(int re i=1;i<=n;i+=2){ if(a[i]!=a[i+1]){ flag=true; break; } } puts(flag?"1"
:"0"); } return 0; }