Gym 101147A The game of Osho(SG找规律)

https://vjudge.net/problem/Gym-101147A

题意:
给出G组数,每组数包括两个数B,N,两玩家轮流取数,使得N-num,num<=N并且num是N的整次幂。判断谁赢。

思路:
这道题目数据量很大,直接打表是不行的。

我们可以打一些数据出来观察一下,找一下规律。

规律是这样的:

如果B为奇数,那么SG函数0,1间隔出现。

如果B为偶数,你可以每B+1个数观察一下规律。

具体可以自己打个数据看一下。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<vector>
 6 #include<stack>
 7 #include<queue>
 8 #include<cmath>
 9 #include<map>
10 using namespace std;
11 typedef long long LL;
12 
13 LL b,n;
14 
15 int main()
16 {
17     freopen("powers.in","r",stdin);
18     int T;
19     scanf("%d",&T);
20     while(T--)
21     {
22         int num;
23         int pre=0;
24         int flag;
25         scanf("%d",&num);
26         for(int i=0;i<num;i++)
27         {
28             scanf("%lld%lld",&b,&n);
29 
30             if(b&1)
31             {
32                 if(n&1) flag=1;
33                 else flag=0;
34             }
35 
36             else
37             {
38               if(n%(b+1)==b)
39                   flag=2;
40                   else
41                   flag=((n%(b+1))&1);
42             }
43             pre=pre^flag;
44         }
45         if(pre) puts("1");
46         else puts("2");
47     }
48     return 0;
49 }
原文地址:https://www.cnblogs.com/zyb993963526/p/6908838.html