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
思路:一.看数据量这么大,刚开始思路分两种情况考虑,如何直接取要用到大数相加.
二.找规律,顺着打打表找了下规律.1A2A3B4A5A6B7A8A9B,的规律.
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime> 10 #include <map> 11 #include <set> 12 using namespace std; 13 #define lowbit(x) (x&(-x)) 14 #define max(x,y) (x>y?x:y) 15 #define min(x,y) (x<y?x:y) 16 #define MAX 100000000000000000 17 #define MOD 1000000007 18 #define pi acos(-1.0) 19 #define ei exp(1) 20 #define PI 3.141592653589793238462 21 #define INF 0x3f3f3f3f3f 22 #define mem(a) (memset(a,0,sizeof(a))) 23 typedef long long ll; 24 const int N=10005; 25 const int mod=1e9+7; 26 ll n,sum; 27 string s; 28 int main() 29 { 30 scanf("%lld",&n); 31 for(int i=1;i<=n;i++){ 32 cin>>s; 33 sum=0; 34 for(int i=0;i<s.length();i++) 35 sum+=s[i]-'0'; 36 if(sum%3==0) 37 printf("B\n"); 38 else 39 printf("A\n"); 40 } 41 return 0; 42 }