题意:给出n堆石子,每次可以从n/2堆里取任意多个,当石子少于n/2堆时,现在拿石子的人输。
思路:当有一个人把任意一堆石子拿完时,它是必败的,因为另一个可以把另外的n/2堆石子拿完,则剩下不足n/2堆。由于n都是偶数,则可以从2开始打表,发现,若对所有石子排序后,若最小的石子堆数大于n/2时,必定bob赢。
当最少的石子堆数小于等于n/2时,先手可以将后一半石子拿的和前一半一样,然后就模仿后手拿的策略,最后一定后手走到必败态,先手赢。
当最少的石子堆数大于n/2时,无论先手怎么取,后手只要保证它拿n/2堆石子与先手取完后的最小堆数量一致即可,那么先手必定会先拿空一堆,先手必败。
#include <bits/stdc++.h>
using namespace std;
int main () {
int n, a[1000];
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
if(a[0] == a[n / 2])
cout << "Bob" << endl;
else
cout << "Alice" << endl;
return 0;
}