7
1
38
插入图片
(上传图片支持 JPG、GIF、PNG 格式,不要超过 2MB)
关闭
插入
公式预览:
关闭
确定
修改 隐藏话题
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
收藏
关注
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次只能拿1,3,4颗,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N,问最后谁能赢得比赛。
例如N = 2。A只能拿1颗,所以B可以拿到最后1颗石子。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000) 第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)
Output
共T行,如果A获胜输出A,如果B获胜输出B。
Input示例
3 2 3 4
Output示例
B A A
本来想用SG写,不过SG函数开不了1e9,然后用SG推出了规律。。。虽然直接手推也能推出来....
#include<bits/stdc++.h>
//#include <iostream>
//#pragma GCC optimize(2)
using namespace std;
#define maxn 10005
#define inf 1e18
typedef long long ll;
const ll mod = 100;
ll T,n,ans,sg[maxn],f[3] = {1,3,4},arr[maxn];
bool flag[maxn];
/*void getsg(ll x)
{
memset(sg,0,sizeof(sg));
for(ll i = 1; i <= x; i++)
{
memset(flag,0,sizeof(flag));
for(ll j = 0; f[j]<=i && j < 3; j++)
flag[ sg[ i-f[j] ] ] = 1;
for(ll j = 0; ; j++)
if(flag[j] == 0)
{
sg[i] = j;
break;
}
}
return ;
}*/
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin >> T;
//getsg(maxn);
while(T--)
{
cin >> n;
/*if(sg[n])
cout << "A" << endl;
else
cout << "B" << endl;*/
if(n%7==0 || n%7==2)
cout << "B" << endl;
else
cout << "A" << endl;
}
return 0;
}