P4101 [HEOI2014]人人尽说江南好

Posted mysh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P4101 [HEOI2014]人人尽说江南好相关的知识,希望对你有一定的参考价值。

题目描述

小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家),最近他 想起了小时候在江南玩过的一个游戏。

在过去,人们是要边玩游戏边填词的,比如这首《菩萨蛮》就是当年韦庄在玩游戏时填 的: 人 人 尽 说 江 南 好, 游 人 只 合 江 南 老。

然而我们今天不太关心人们填的词是什么,我们只关心小 Z 那时玩过的游戏。游戏的规 则是这样的,给定 N 堆石子,每堆石子一开始只有 1 个。小 Z 和他的小伙伴轮流操作, 小 Z 先行操作。操作可以将任意两堆石子合并成为一堆,当谁不再能操作的时候,谁就输掉了。

不过,当一堆石子堆的太高时可能发生危险,因此小 Z 和他的小伙伴规定,任何时刻任意一 堆石子的数量不能超过 m。即假如现在有两堆石子分别有 a 个和 b 个,而且 a+b>m,那么这 两堆石子就不能合成一堆。

小 Z 和他的小伙伴都是很聪明的,所以他们总是会选择对自己最有利的策略。现在小 Z 想要知道,在这种情况下,对于一个给定的 n 和 m,到底是谁能够获得胜利呢?

输入格式

本题包括多组数据 数据第一行为一个数 T,为数据组数 以下 T 行,每行两个正整数 n,m

输出格式

输出 T 行,每行为 0 或 1,如果为 0 意为小 Z(即先手)会取得胜利,为 1 则为后手会 取得胜利。

输入输出样例

输入 #1
5
7 3
1 5
4 3
6 1
2 2
输出 #1
1
1
1
1
0

说明/提示

对于 10%的数据, m>=n

对于 20%的数据, n,m<=10

对于 30%的数据, n,m<=50, 2*m>=n

对于 50%的数据, n,m<=100

对于 70%的数据, n,m<=1000000

对于 100%的数据, n,m<=1000000000, T<=100

思路

代码

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int t;
long long n,m;

int main () 
	scanf("%d",&t);
	while(t--) 
		scanf("%lld%lld",&n,&m);
		long long ans=(n/m)*(m-1)+((n%m)?(n%m-1):0);
		if(ans&1)
			printf("0\n");
		else
			printf("1\n");
	
	return 0;

 

以上是关于P4101 [HEOI2014]人人尽说江南好的主要内容,如果未能解决你的问题,请参考以下文章

[HEOI2014] 人人尽说江南好

bzoj3609 [Heoi2014]人人尽说江南好 博弈

BZOJ3609 [Heoi2014]人人尽说江南好 博弈

bzoj 3609: [Heoi2014]人人尽说江南好博弈论

Bzoj3609[Heoi2014]人人尽说江南好(博弈)

博弈论总结