[C/C++]无聊的游戏
题目 :A、B两人玩下面的游戏:从集合E={1,2,...,n}中随机取k个数。若这k个数的和是偶数,则A获胜;否则B获胜。请你判断游戏对谁有利。
输入:第一行为一个整数T,表示数据组数。接下来T行,每行包含两个正整数n,k(k<=n<=10^9),用空格隔开。
输出:对于每组数据,若游戏对A有利,输出A,若对B有利,输出B,若游戏公平,输出F。每个答案一行。
示例输入:
2 1 1 2 1
示例输出:
B F
来源bnuoj contest 5727A
观察:
n = 5 时 (E = {1,2,3,4,5})
n = 6 时 (E = {1,2,3,4,5,6})
n = 7 时 (E = {1,2,3,4,5,6,7})

n = 8 时 (E = {1,2,3,4,5,6,7,8})
n = 9 时 (E = {1,2,3,4,5,6,7,8,9})
n = 10 时 (E = {1,2,3,4,5,6,7,8,9,10})
发现:
- n为奇数时胜负情况为BBAABBAABBAAB……
- 此时不会公平(F)。对 K/2 向上取整或四舍五入后, 结果是奇数时对B有利;反之对A有利
- n为偶数时胜负情况为FB FA FB FA FB FA……
- 此时K为奇数时公平(F)。K为4的倍数时对A有利,剩下的对B有利
背后的黑科技不清楚

#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char const *argv[])
{
long long sum, i;
cin >> sum;
for(i = 0; i < sum; i++)
{
long long n, k;
cin >> n >> k;
if(!(n%2)) //n为偶
{
if(!(k%4))
{
cout << "A" << endl;
continue;
}
else if(!(k%2))
{
cout << "B" << endl;
continue;
}
else
{
cout << "F" << endl;
continue;
}
}
else
{
if( !( ((long long)ceil(k/2.)) % 2) ) //偶数组
{
cout << "A" <<endl;
continue;
}
else
{
cout << "B" << endl;
continue;
}
}
}
return 0;
}





感觉你的博客好棒~