POJ1740之構造博弈
阿新 • • 發佈:2018-12-24
從簡單開始,首先,一堆的話先手必勝。
如果有兩堆,則只有兩堆相同的時候先手會輸。若兩堆不同,先手可以造成兩堆相同的局面從而不輸。
如果有三堆,先手可以拿走一堆並製造兩堆相同的情況。
我們發現,將n堆石子排序,如果石子數量對稱,即每種數量的石子有偶數堆,則先手必輸。
因為先手並不能取光所有的,而後手只要模仿先手的行為就能一直有石子可取。
繼續推理,我們會發現只有這種情況先手會輸。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[11 ];
int main()
{
while (scanf("%d",&n))
{
if (n==0) return 0;
for (int i=1; i<=n; i++) scanf("%d",&a[i]);
if (n%2==1) printf("1\n");
else
{
int i;
sort(a+1,a+n+1);
for (i=1; i<=n;i +=2)
if (a[i]!=a[i+1]) { printf("1\n"); break; }
if (i>n) printf("0\n");
}
}
}