Gym 101147.A - The game of Osho(SG函数+二项展开)

原创 2017年10月06日 21:55:17

题意:m堆石子,每堆有对应一个(BiNi),表示这堆有Ni个石子,每次可以拿Bix个石子(1BxiNi),谁不能拿谁输,1和2轮流拿,两人足够机智,问谁必胜。

思路:首先分奇偶性讨论,显然在Bi为奇数的时候,我们容易得到,Ni为奇数和偶数时候,分别是先手必胜、后手必胜。sg分别是1和0。

  然后是Bi为偶数的时候,我们可以对Bi^x进行一个二项式展开,有两种展开,(B - 1 + 1),(B + 1 - 1),我们选择后者进行展开,那么,由于是(a-b)^x,奇偶性影响每一项的符号,会得到两种展开,B^x = K*(B+1) + 1 或B^x =K*(B+1) + B。

  令Ni=y*(B+1)+T(0<=T<=B),那么问题变成T个石子,每次可以拿1个或B个。由于T<=B,所以只有当T=B时先手有机会第一次拿B个,其他所有情况两个人都无法拿B个,当T < B时,T为奇则先手胜(sg=1),T为偶则后手胜(sg=0),T=B时两个后继状态分别是B-1和0。B-1考虑一下奇偶性就能知道sg值,然后是0的sg值。
  

#include <bits/stdc++.h>
using namespace std;

int main()
{
    freopen("powers.in", "r", stdin);
    int T;
    scanf("%d", &T);
    while(T--)
    {
        int G;
        scanf("%d", &G);
        int ans = 0;
        for(int i = 0; i < G; i++)
        {
            int b, n;
            scanf("%d%d", &b, &n);
            if(b & 1)
            {
                if(n & 1)   ans ^= 1;
                else ans ^= 0;
            }
            else
            {
                int mod = n % (b + 1);
                if(mod == b)
                {
                    if(b & 1)   ans  ^= 1;
                    else ans ^= 2;
                }
                else
                {
                    if(mod & 1) ans ^= 1;
                    else ans ^= 0;
                }
            }
        }
        printf("%d\n", ans == 0 ? 2 : 1);
    }
    return 0;
}
版权声明:欢迎纠错,毕竟弱校蒟蒻orz。本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Game of Hyper Knights (SG函数)

Game of Hyper Knights (SG函数) :http://acm.hust.edu.cn/vjudge/contest/view.action?cid=112620#problem/G...

ECPC16-A.The game of Osho(博弈)

题目链接题目大意: 有T组数据 给你G个子游戏,每个子游戏有一个数n,两个人轮流可以减去b的幂次,前提是小于等于n。不能再减就算输。 问最后谁赢。打sg表找规律。。 多个子游戏 ,则结果异或。...

about The Game of Nim's Theorem 1 which almost like SG

2. The Game of Nim. The most famous take-away game is the game of Nim, played as follows. There are...

Codeforces Gym 100650C The Game of Efil DFS

题目链接:http://codeforces.com/gym/100650/attachments题意:每个细胞如果四周细胞太少了,就会孤独而死,如果细胞周围细胞太多了,就会挤死。给你个布局,问你他的...

Codeforces Gym100650C The Game of Efil

Problem C: The Game of EfilAlmost anyone who has ever taken a class in computer science is famil...

UVALive-7278 - Game of Cards【博弈】【sg定理】

UVALive-7278 - Game of Cards 题目大意:A、B两个人玩游戏。A先手,问最后谁赢。游戏规则: 给出n堆纸牌,可任意选择其中一堆,记为x 在x的顶部可取走[0,k]张纸牌,该...

hdu4155 The Game of 31------sg dfs

The Game of 31 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

Gym 100703F Game of words 动态规划

F. Game of words time limit per test 2 seconds memory limit per test 256 megabytes input stand...

Gym 101147F Bishops Alliance 题解

Gym 101147F题解

Gym - 101147H H. Commandos DAG

题意:即普通的DAG加了一维。 DAG上的dp 三维的有向无环图上dp, dp[k][i][j] = max(dp[k][i][j], dp[k][i+1][j] + mp[k][i][j]); dp...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)