Alice and Bob are playing a game with nn piles of stones. It is guaranteed that nn is an even number. The ii-th pile has aiai stones.
Alice and Bob will play a game alternating turns with Alice going first.
On a player's turn, they must choose exactly n2n2 nonempty piles and independently remove a positive number of stones from each of the chosen piles. They can remove a different number of stones from the piles in a single turn. The first player unable to make a move loses (when there are less than n2n2 nonempty piles).
Given the starting configuration, determine who will win the game.
The first line contains one integer nn (2≤n≤502≤n≤50) — the number of piles. It is guaranteed that nn is an even number.
The second line contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤501≤ai≤50) — the number of stones in the piles.
Print a single string "Alice" if Alice wins; otherwise, print "Bob" (without double quotes).
题目大概意思就是,有n堆石头,2个人每次可以取走n/2推石头中任意石头,大于0,当石头推小于n/2时,输
emmmmm,就是一道博弈题,这堆石头的最小值为x,x的推数为m,当m<=n/2时,Alice可以将剩下的大于m的数变为m,也就是说,Alice强迫Bob将m的值减小,而他最多减小n/2,下一轮Alice继续重复这个过程
直到m变为0,Alice获胜。代码如下
#include <bits/stdc++.h> #define INF 0x3f3f3f3f const double PI=3.1415926535897931; const long long sale=1e9+10; const int MA= 1e7+10; const int ma= 2*1e5+10; const int few=1e3+10; using namespace std; ////////////////////////////////////////////// int main() { int n; cin>>n; int a[ma]; int minn=INF; for(int i=0; i<n; i++) { cin>>a[i]; minn=min(minn,a[i]); } int cnt=0; for(int i=0; i<n; i++) { if(minn==a[i]) cnt++; } if(cnt<=n/2) cout<<"Alice"<<endl; else cout<<"Bob"<<endl; return 0; }