关闭

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

328人阅读 评论(0) 收藏 举报
分类:

题意: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;
}
0
0
查看评论

Nim 游戏和 SG 函数

Nim游戏Nim游戏定义Nim游戏是组合游戏(Combinatorial Games)的一种,准确来说,属于“Impartial Combinatorial Games”(以下简称ICG)。满足以下条件的游戏是ICG(可能不太严谨):1、有两名选手;2、两名选手交替对游戏进行移动(move),每次一...
  • Zarth
  • Zarth
  • 2016-04-30 23:12
  • 862

codeforces 399 E. Game of Stones 博弈 思维题

题目地址http://codeforces.com/contest/768/problem/E题意有1<=n<=1e61 <= n <= 1e6堆石子,每堆石子个数为1<=s<=601 <= s <= 60,每次选一堆石子,取走任意石子(不能为0),唯...
  • dpppBR
  • dpppBR
  • 2017-02-22 17:26
  • 385

GYM 100827 G.Number Game(博弈论)

Description 一个1~n的排列,每次可以拿走一个数当且仅当这个数大于其两边位置的数(0和n+1位置认为是0),一个数被拿走之后可以认为这个位置的数是0,Alice和Bob轮流拿,谁拿走1谁赢,Alice先手,在双方足够机智的条件下问谁必胜 Input 第一行一整数T表示用例组数,每组...
  • V5ZSQ
  • V5ZSQ
  • 2017-03-10 14:05
  • 183

Gym 100814A---Arcade Game

Description standard input/output Statements Arcade mall is a new modern mall. It has a new hammer game called “Arcade Game”. In this game you’re ...
  • why850901938
  • why850901938
  • 2016-04-20 22:09
  • 480

Drazil and Factorial - CodeForces 513 C 水题

Drazil and Factorial time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard ou...
  • u014733623
  • u014733623
  • 2015-02-19 18:19
  • 812

Arcade Game Gym - 100814A

Arcade Game  Gym - 100814A  Arcade mall is a new modern mall. It has a new hammer game called "Arcade Game". In this...
  • sxh759151483
  • sxh759151483
  • 2017-08-06 19:35
  • 93

Codeforces Gym 100814J Game 简单博弈

题目大意: 就是现在初始的时候有一个字符串S, 长度不超过10000 两个人轮流操作 每次可以选择从左向右将连续两个字符按照给出的矩阵进行变化 或者选择从右往左 如果最后剩下的是元音字母则Salah获胜, 否则Marzo获胜 Salah先手问谁会获胜 大致思路: 比较水, 考...
  • u013738743
  • u013738743
  • 2015-11-21 20:35
  • 777

博弈sg函数

sg函数(个人认为还是用于三种方法都无法解决的情况,如按特殊数字取石子) 我们把整个博弈过程抽象为有向无环图 1.      几项准备工作: mex求最小非负整数mex{} = 0,mex{0,1,2,4} = 3,mex{1,2,4} =...
  • qq_30241305
  • qq_30241305
  • 2016-03-07 15:36
  • 1164

GYM 101147 A.The game of Osho(博弈论)

Description m堆石子,每堆有对应一个(Bi,Ni),表示这堆有Ni个石子,每次可以拿Bi^x个石子(1<=Bi^x<=Ni),谁不能拿谁输,1和2轮流拿,两人足够机智,问谁必胜 Input 第一行一整数T表示用例组数,每组用例首先输入石子堆数m,之后2*m个整数(Bi,...
  • V5ZSQ
  • V5ZSQ
  • 2017-03-21 18:46
  • 415

博弈论 SG函数

别被文章长度吓到,学会博弈(SG)只用看前1/10。 鉴于讲明白博弈要写好多字,于是找了些论文拼凑,对疑难点加了注释并配上“美图”助解。 Nim游戏 重点结论:对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示位异或(xor...
  • strangedbly
  • strangedbly
  • 2016-04-12 21:36
  • 7527
    个人资料
    • 访问:16968次
    • 积分:1303
    • 等级:
    • 排名:千里之外
    • 原创:120篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    友情链接