HDU - 1525】的更多相关文章

给两数a,b,大的数b = b - a*k,a*k为不大于b的数,重复过程,直到一个数为0时,此时当前操作人胜. 可以发现如果每次b=b%a,那么GCD的步数决定了先手后手谁胜,而每次GCD的一步过程视为一个子游戏,但是可以发现如果当前可以约的次数大于2,那么此时操作的人可以控制局面,那么考虑所有可约次数大于2的即可. /** @Date : 2017-10-12 21:46:31 * @FileName: HDU 1525 类bash 博弈.cpp * @Platform: Windows *…
A - 无聊的游戏 HDU - 1525 疫情当下,有两个很无聊的人,小A和小B,准备玩一个游戏,玩法是这样的,从两个自然数开始比赛.第一个玩家小A从两个数字中的较大者减去两个数字中较小者的任何正倍数,前提是得到的数字必须是非负的.然后,第二个玩家小B对得到的两个数字做同样的处理,两个玩家交替进行,直到一个玩家能够从大的数字中减去较小数字的倍数,达到0,从而获胜.例如,玩家可以从(25,7)开始: 25 7 11 7 4 7 4 3 1 3 1 0 这是个 小A 获胜的例子. Input 多组输…
Euclid's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3174    Accepted Submission(s): 1474 Problem Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan,…
感觉这道题用PN大法好像不顶用了,可耻地看了题解. 考虑一下简单的必胜状态,某一个数是另一个数的倍数的时候是必胜状态. 从这个角度考虑一下:游戏进行了奇数步还是偶数步决定了哪一方赢. 如果b > 2a,那么这一方就有权利改变游戏步数的奇偶性,从而到达对自己有利的状态,所以这是一个必胜状态. 如果a < b < 2a,那么下一步只能到达(b-a, a)状态,一直模拟就行. #include <cstdio> #include <algorithm> using na…
Euclid's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1256    Accepted Submission(s): 576 Problem Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan,…
思路:两个数a和b,总会出现的一个局面是b,a%b,这是必然的,如果a>=b&&a<2*b,那么只有一种情况,直接到b,a%b.否则有多种情况. 对于a/b==1这种局面,只可能到b,a%b,没有选择.而a/b>=2的话,先手可以选择由谁面对b,a%b这样的局势,先手在a/b>=2的局面必胜 代码如下: #include<stdio.h> #include<iostream> #include<algorithm> #includ…
题目大意: 题目给出了两个正数a.b 每次操作,大的数减掉小的数的整数倍.一个数变为0 的时候结束. 谁先先把其中一个数减为0的获胜.问谁可以赢.Stan是先手. 题目思路: 无论a,b的值为多少,局面:[a%b,b] 一定会出现. 双方都足够聪明,无论谁都知道这种局面是必胜局面还是必败局面 若是必败局面操作者为了获胜,直接到达[a%b,b]局面就可以(将必败局留给对方) 若是必胜局操作者为了获胜,到达[a%b+b,b]局面(经过对手操作后,将必胜局面留给自己) #include<stdio.h…
题意:给你两个数,a,b,有两个人轮流进行一次操作, 每次操作可以将大的数减去k倍的小的数,最后不能操作的人输了,问你谁赢了. 思路:我们可以用辗转相除法求出对于每一个状态可以改变几次,这样问题就变成了给你若干堆石子,只能将前面堆的石子全部取完啦才能 取当前堆的石子,对于每一堆来说能取任意个,最后不能取的人失败,从后往前必败必胜推一下就好啦. #include<bits/stdc++.h> #define LL long long #define fi first #define se sec…
Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the lesser of the two numbers from the greater of the two numbers, provided that the resulting number must be nonnegative…
先来看看比较显然的几个局面 (a,0) 先手必败 (a,a) 先手必胜 (a,ak) 先手必胜 (a,ak+r),k>1 先手必胜,因为先手有主动权把(a,r)让给后手或留给自己 对于开局(a,r),r<a&&a/r<2,比较难分析,我们用暴力直接跑出结果 挑战程序设计竞赛把这种主动权成为自由度,名字真高端 这次的代码写的不怎么简练,不过能AC #include<iostream> #include<algorithm> #include<c…