题意:
有n堆狗,n堆猫。A取一堆狗并选一些狗(至少一只),B取一堆猫并选一些猫(至少一只)。选走最后一个动物的人赢了。求先手是否必胜。
思路:
A选择次数范围为 [ n , ∑ s u m ( a [ i ] ) ] [n,∑sum(a[i])] [n,∑sum(a[i])]
B选择次数范围为 [ n , ∑ s u m ( b [ i ] ) ] [n,∑sum(b[i])] [n,∑sum(b[i])]
每次只取一个最优,
易得谁的选择次数上限更大,谁就能赢。如果选择次数上限一样,后手赢。
#include <cstdio>
using namespace std;
int main(){
int T;scanf("%d",&T);
while(T--){
int n;scanf("%d",&n);
int a = 0,b = 0;
for(int i = 1;i <= n;i++){
int x;scanf("%d",&x);
a += x;
}
for(int i = 1;i <= n;i++){
int x;scanf("%d",&x);
b += x;
}
if(a > b) printf("BaoBao\n");
else printf("DreamGrid\n");
}
return 0;
}