POJ 2348 Euclid's Game(简单博弈)】的更多相关文章

题意:有a,b两个数字,两人轮流操作,每次可以选择两个之中较小的数字,然后另一个数字减去选择数字的任意倍数(不能减到负数),直到其中一个为0,不能操作为败 思路:这题用博弈NP思想,必败点和必胜点之间的转化. 我们假设当前状态为(x,y)其中x>=y,那么必有以下任一状态: 1. x < 2 * y:那么这是只能执行一个操作x - y,如果这个操作之后变成必败态,那么当前为必胜态:反之亦然. 2. x >= 2 * y:显然此时有多种选择,假设x = k * y,如果x - (k - 1…
题目链接: http://poj.org/problem?id=2348 题意: 给定两个数,两个人每次从较大数中减去较小数的倍数,谁先得到0谁获胜,为谁赢? 分析: 令一种可能出现的整数对为(a,b),其中(b>a).有两种情况 b−a<a,只能从b中减去一个a,得到状态(b−a,a),那么如果(b−a,a)是必胜态的话,(a,b)就是必败态,反之同理. b−a>a,可以从b中减去至少2个a,假设可以从b中最多可以减去x个a,那么从b中减去(x−1)个a后得到状态(a,b−(x−1)∗…
Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9023   Accepted: 3691 Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the lesser o…
这道题没说a b最大多少,所以要声明为long long型,不然会WA! 道理很简单,(默认a>=b)a和b只有以下三种关系: 1.a%b==0 :这种关系下,可能是a/b为整数,也可能是a和b都为0,不论哪种,都会是先者胜: 2.a<2*b :这种关系下,下一步只能变成(a-b,b),故胜的几率是交替的(cnt++): 3.a>2*b :这种关系下,下一步总能变成(a,a%b)和(a,a%b+b)两种状态,而这两种状态又与第2种状态(a<2*b)相邻,故两种状态中必有一种处于必败…
题目链接:http://poj.org/problem?id=2348 题目大意:给你两个数a,b,Stan和Ollie轮流操作,每次可以将较大的数减去较小的数的整数倍,相减后结果不能小于0,谁先将其中一个数字变成0谁就获胜. 解题思路:看了挑战程序设计上的,这里我们先假设a<b,当b是a的整数倍是必胜态.我们讨论以下b不是a的整数倍,此时a,b的关系按照自由度的观点(第一次听说),可以分为以下两种情况: ①b-a<a ②b-a>a 那么对于①,玩家只有从b中减去a这一个选择.如果b-a…
题意:给定两个整数,两个人轮流操作,每次可以用较大数减去较小数的整数倍,当一个数变成0时,则结束,问谁会胜. 析:很明显如果 a == b 那么就可以直接结束了,那么如果 a > b我们可以交换两个数,保证 a < b.可以分成两类, (1) b - a < a (2)  b - a > a 对于第一类,只能一种拿法,只能是从 b 中拿去 a.对于第二种,如果 b 减去 a 后是必败态,那么当前就是必胜态,如果得到是必胜态,那么当前就是必败态, 我们假设 b - ax < a…
http://poj.org/problem?id=2348 顺便说,必应翻译真的好用,比谷歌翻译好用100倍. 很难判断这道题的具体博弈类型. 有两种写法,一种是找规律,一种是推理得到关系后循环(或递归)处理.两种写法都能在题目下面的discuss中找到. 1.找规律,我在这里直接复制了discuss中大神算出的sg函数表(在考试中这种写法是很值得借鉴的,这里就体现出代码能力的重要了,找规律天下第一!). 我算了一下前 30 × 30 的 Sprague-Grundy 函数表,如下: 0 1…
[题目链接] http://poj.org/problem?id=2348 [题目大意] 给出两个数,两个参赛者轮流用一个数减去另一个数的倍数,当一个数为0的时候游戏获胜, 求先手是否必胜 [题解] 如果出现一个数是另一个数两倍以上的时候,操作者就拥有了一定的自由度, 也就是处于必胜态,那么只要判断谁先到有自由操作的状态或者胜利的状态,谁就必胜. [代码] #include <cstdio> #include <algorithm> using namespace std; int…
题目: 给两个整数a和b,两个人先后用较大的数减去较小数的整数倍,并且保证相减后为非负数.先把一个数变为0的人获胜. 分析: 很显然,当大数是小数的整数倍时为必胜态. 从这道题学会一个叫做自由度的东西,感觉能够为博弈推理提供思路. 博弈基本就是一个推理必胜态和必败态的过程.自由度越低越好推理. 不妨假设b为两个数中的较大数. 如果b-a<a 那么只能选择用b去减a,如果后继态是必胜态,那么该状态是必败态,否则就是必胜态. 如果b-a>a呢? 我们怎么能够转移到自由度较低的情况. 假设x是是的b…
Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7942   Accepted: 3227 Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the lesser o…
 NBUT 1107  盒子游戏 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:  Practice  Appoint description:  System Crawler  (Aug 13, 2016 10:35:29 PM) Description 有两个相同的盒子,其中一个装了n个球,另一个装了一个球.Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作每次操作时,游戏者…
Georgia and Bob Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9363   Accepted: 3055 Description Georgia and Bob decide to play a self-invented game. They draw a row of grids on paper, number the grids from left to right by 1, 2, 3, ...…
n*n棋盘,初始左上角有一个石头,每次放只能在相邻的四个位置之一,不能操作者输. 如果以初始石头编号为1作为后手,那么对于每次先手胜的情况其最后一步的四周的编号必定是奇数,且此时编号为偶数,而对于一个局面,每个人都可以操控方向以致走完整个棋盘,所以当棋盘总格数为偶数时,先手必胜,而为奇数时,后手必胜. /** @Date : 2017-10-13 21:22:47 * @FileName: HDU 1564 简单博弈.cpp * @Platform: Windows * @Author : Lw…
原题如下: Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10832   Accepted: 4426 Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the l…
Description 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…
Problem description: 以辗转相除法为基础,给定两个整数a和b,Stan和Ollie轮流从较大的数字中减去较小数字的倍数(整倍数),并且相减后的结果不能为零.Stan先手,在自己的回合将其中一个数变为零的一方获胜,当双方都采取最优策略时,谁会获胜? a,b都是正整数. Input: a=34 b=12 Output: Stan wins 找规律: 首先,如果a>b则交换,假设a<b.另外,如果b已经是a的倍数则必胜,所以假设b不是a的倍数.此时a与b的状态有以下两种: (1)…
Calendar Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1871    Accepted Submission(s): 1065 Problem Description Adam and Eve enter this year’s ACM International Collegiate Programming Con…
A Funny Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4639   Accepted: 2855 Description Alice and Bob decide to play a funny game. At the beginning of the game they pick n(1 <= n <= 106) coins in a circle, as Figure 1 shows. A mo…
Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻.今天,大家选择上机考试,就是一种勇敢(brave)的选择:这个短学期,我们讲的是博弈(game)专题:所以,大家现在玩的也是"勇敢者的游戏",这也是我命名这个题目的原因.当然,除了"勇敢",我还希望看到"诚信",无论考试成绩如…
Description Here is a simple game. In this game, there are several piles of matches and two players. The two player play in turn. In each turn, one can choose a pile and take away arbitrary number of matches from the pile (Of course the number of mat…
题目:http://poj.org/problem?id=1200 最近看了一个关于hash的问题,不是很明白,于是乎就找了些关于这方面的题目,这道题是一道简单的hash 字符串题目,就先从他入手吧. 题目说字串的最大数量不超过16Millions,也就是字串的存储16000000就够了. 查看网上给出的hash映射是把字串映射成为一个NC进制的数字每个字串都是一个数字. #include <stdio.h> #include <iostream> using namespace…
Fliping game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 46    Accepted Submission(s): 35 Problem Description Alice and Bob are playing a kind of special game on an N*M board (N rows, M colu…
鉴于时间紧张...虽然知道博弈是个大课题但是花一个上午时间已经极限了... 希望省选过后再回过头来好好总结一遍吧. 接下来为了看着顺眼一点...还是按照难度顺序吧   POJ1082 一道最简单的博弈题,只需要DP就可以过. 在这道题里我尽情展示了多函数多过程的代码风格.. program poj1082; ..=[,,,,,,]; var n,i,x,y,z:longint; f:array[..,..,..]of boolean; function leap(x:longint):boole…
前些日子我打算开了博弈基础,事后想进行总结下 一句话就是分析必胜或必败,异或为0. 以下内容来自转载: Nim游戏的概述: 还记得这个游戏吗?给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输.后来,在一份资料上看到,这种游戏称为“拈(Nim)”.据说,它源自中国,经由被贩卖到美洲的奴工们外传.辛苦的工人们,在工作闲暇之余,用石头玩游戏以排遣寂寞.后来流传到高级人士,则用便士(Pennies),在酒吧柜台上玩.最有名的玩法,是把十二枚便士放成3.4.…
[题意简述]:就是有这种一个序列.就拿当p1 = 2,p2 = 3, p3 = 5,来举例.由这三个数为基准组成的序列是: 2,3,4,5,6,8,9,10,12--如今给你这个序列数组的下标,让你求得这个数组中,这个下标里的数是多少. [分析]:2,3,4,5,6,8,9,10,12--这个序列式由2,3,5这三个数生成的,详细怎样生成,就是: 详见代码: 这里以POJ2545为例: //弄清当中的逻辑关系,能够从最简单的2,3,5试着做起! #include<iostream> #incl…
同样是今天做bzoj时做到的,感觉能力范围之内的就做了,也是蛮简单的 1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1876 Solved: 993 [Submit][Status][Discuss] Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵双…
Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7418   Accepted: 3022 Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the lesser o…
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,…
题目链接: http://poj.org/problem?id=3267 从后往前遍历,dp[i]表示第i个字符到最后一个字符删除的字符个数. 状态转移方程为: dp[i] = dp[i+1] + 1;                                                 //当不能匹配时 dp[i] = std::min(dp[i], dp[msg] + (msg-i) - len[j]);  //当匹配时. 第i个字符到第msg个字符之间一共有msg-i个字符,减去…
A multiplication game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5622   Accepted: 2811 Description Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers 2 to 9. Stan always starts with p =…