51nod 1068 Bash游戏 V3

有一堆石子共有N个。A B两个人轮流拿,A先拿。每次拿的数量只能是2的正整数次幂,比如(1,2,4,8,16....),拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N,问最后谁能赢得比赛。

例如N = 3。A只能拿1颗或2颗,所以B可以拿到最后1颗石子。(输入的N可能为大数)

Input

第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000)
第2 - T + 1行:每行1个数N。(1 <= N <= 10^1000)

Output

共T行,如果A获胜输出A,如果B获胜输出B。

Input示例

3
2
3
4

Output示例

A
B
A

SG找规律,发现3的倍数,第二部,N很大,每位相加能否整除3(小学的性质诶。。。居然忘了)


#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,ans,sg[maxn],f[maxn] = {1,2,4,8,16,32,64,128},arr[maxn];
string n;
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 < 8; 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;
        
        ll num = 0;
        
        for(ll i = 0; i < n.size(); i++)
            num += n[i]-'0';
        
        if(num%3!=0)
            cout << "A" << endl;
        else
            cout << "B" << endl;




    }









    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值