Forethought Future Cup - Final Round (Onsite Finalists Only)

C.Thanos Nim

Difficulty\mathtt{Difficulty}=2000\mathtt{2000}
先说结论:

如果石子最小堆数量不超过 n2\frac{n}{2} 时,先手必胜,反之后手必胜

如果石子最小堆数量超过了 n2\frac{n}{2}
那么先手无论怎么选,
一定会选到一些最小堆,
这就会使得最小堆的数量减少
然后后手不妨将其余的非最小堆的一部分变成最小堆,
但是当最小堆数量变为 00
而剩余堆超过 n2\frac{n}{2} 时,
再操作一次即可获胜,
经过观察可知最后胜利者一定是后手
那么我们就得到了结论:

如果石子最小堆数量不超过 n2\frac{n}{2} 时,先手必胜,反之后手必胜

代码就不难写出了

#include<bits/stdc++.h>
#define BetterIO ios::sync_with_stdio(false)
using namespace std;
int N,A[1001];
int main(void)
{
	BetterIO;
	#ifndef ONLINE_JUDGE
	freopen("IN.in","r",stdin);
	#endif
	register int i;cin>>N;
	for(i=1;i<=N;i++)cin>>A[i];
	sort(A+1,A+N+1);
	if(A[1]!=A[N/2+1])puts("Alice");
	else puts("Bob");
	return 0;
}