题意:
对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余石子的一部分分给其它的某些堆。最后谁无子可取即输。
思路:
我们发现对于任意一个排列,排序后,如果个数是偶数,且a[1]=a[2],a[3]=a[4],…,a[n-1]=a[n],由于此时,无论先手如何选择,后手均可以做和先手一样的选择,所以这是一个失败状态,而别的情况,均可以转变为这个失败状态,所以都是成功状态。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
int n,ans;
int a[20];
int main(){
	while (true)
	{
		scanf("%d",&n);
		if (!n) break;
		for (register int i=1; i<=n; ++i) scanf("%d",&a[i]);
		if (n&1) {printf("%d\n",1); continue;}
		sort(a+1,a+n+1);
		bool jay=false;
		for (register int i=1; i<n; i+=2) if (a[i]!=a[i+1]) {jay=true; break;}
		if (jay) printf("%d\n",1); else printf("%d\n",0);
	}
return 0;	
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐