题目描述
⭐星星是银河递给月亮的情书,你是世间赠于我的恩赐。
BingBingBing和BongBongBong在玩消数游戏,游戏规则如下:
初始时给定一个数字nnn,然后会有编号为1,2,3...n1,2,3...n1,2,3...n的卡牌共nnn张位于桌面上。
BingBingBing每轮必须选择一个奇数消除,然后可以同时消除一个偶数(此步可以选择做或者不做)。
BongBongBong每轮必须选择一个偶数消除,然后可以同时消除一个奇数(此步可以选择做或者不做)。
BingBingBing先手操作,谁无法操作时即输掉了游戏,若两人都采取最优策略,请您来告诉他们最终的胜者。
输入描述:
第一行一个整数T(1≤T≤2×105),表示数据组数。 接下来T行,每行一个整数n(1≤n≤109),含义如题面所示。
输出描述:
输出共T行,每行一个字符串。Bing或者Bong,表示谁赢得了游戏的胜利。
示例1
输入
3 1 2 4
输出
Bing Bing Bong
说明
当n=1时,数字有1。 第一轮Bing可以选择消除数字1,然后选择不消除偶数。第二轮Bong无法操作,Bing赢得游戏。 当n=2时,数字有1,2。 第一轮Bing可以选择消除数字1,然后消除偶数2。第二轮Bong无法操作,Bing赢得游戏。 当n=4时,数字有1,2,3,4。 第一轮Bing可以选择消除数字1,然后消除偶数2。第二轮Bong选择数字4,消除奇数3。第三轮Bing无法操作,Bong赢得游戏。
牛客周赛的一道签到题,博弈,很可惜,当时判断错了,没过,含泪ac1题
题目大意:给定n个数字(1~n)
其中bing操作时必须拿一个奇数,拿完奇数可以选择拿偶数。
bong操作时必须拿一个偶数,拿完偶数可以选择拿奇数。
可以理解为当n为奇数时,奇数个数比偶数个数多1
当n为偶数时,偶数个数比奇数个数多1
当奇数个数为零时,bing无法操作,bong赢
当偶数个数为零时,bong无法操作,bing赢
通过博弈发现,如果bing想赢,就必须要拿掉这个偶数。使bong的偶数个数-1。bong同理。
通过模拟可以发现
//1
奇数:1,偶数:0;此时bing拿掉1,bong无法操作
//1 2
奇数:1,偶数:1;bing拿掉一个奇数一个偶数 偶数为0
//1 2 3
奇数:2,偶数:1;bing拿掉一个奇数一个偶数 偶数为0
//1 2 3 4
奇数:2,偶数:2;bing拿掉一个奇数一个偶数,奇数为1,偶数为1,bong操作拿掉剩下的一个奇数和偶数,此时奇数为0,bing无法操作
//1 2 3 4 5 奇数:3,偶数:2;
//1 2 3 4 5 6 奇数:3,偶数:3;
//1 2 3 4 5 6 7 奇数:4,偶数:3;
//1 2 3 4 5 6 7 8 奇数:4,偶数:4;
此时可得出结论:
偶数个数不可能比奇数多
当奇数个数>偶数个数时,bing赢,
奇数个数等于偶数个数且两个数均为奇数时,bing赢(bing先操作,若为奇数,则最后拿定是bing)
奇数个数等于偶数个数且两个数均为偶数时,bong赢
所以4个为一组,4的倍数为bong赢,其余bing赢
qwq当时也是这么想的,手残了,写成了2个为一组
代码实现
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
int n;cin>>n;
while(n--)
{
int x;cin>>x;
if(x%4!=0)
{
cout<<"Bing"<<endl;
}
else
{
cout<<"Bong"<<endl;
}
}
return 0;
}