【HDU3595】GG and MM(博弈论)

题面

HDU

一个游戏由多个游戏组成,每次每个操作者必须操作所有可以操作的游戏,操作集合为空者输。

每个游戏由两堆石子组成,每次可以从较多的那一堆中取走较小那堆的数量的倍数个石子。

判断胜负。

题解

\(Every-SG\),所以我们只需要分开考虑两堆。

这题有点性质,假设两堆石子为\(x,y,x<y\),那么令\(k=\lfloor\frac{y}{x}\rfloor\)

如果\(k=1\),显然操作唯一,直接取反后继的\(sg\)函数即可。

如果\(k>1\),显然先手可以控制是把所有倍数都取完还是强制将\(k\)变成\(1\),让后手做一次确定操作,所有此时先手必胜,那么只需要考虑\(k=1\)时的后继状态的\(N/P\)情况,做出相应的抉择就好了。

同理维护\(step\)值即可。

最后判断\(step\)最大值来判定胜负情况。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAX 1010
int n,m,sg[MAX][MAX],step[MAX][MAX];
int Getsg(int x,int y)
{
if(x>y)swap(x,y);
if(~sg[x][y])return sg[x][y];
if(!x||!y)return sg[x][y]=0;
int r=y%x,d=y/x;
if(d==1)
{
sg[x][y]=Getsg(r,x)^1;
step[x][y]=step[r][x]+1;
return sg[x][y];
}
else
{
step[x][y]=Getsg(r,x)+1+step[r][x];
return sg[x][y]=1;
}
}
int main()
{
memset(sg,-1,sizeof(sg));
ios::sync_with_stdio(false);
while(cin>>n)
{
int mx=0,a,b;
while(n--)
{
cin>>a>>b;if(a>b)swap(a,b);Getsg(a,b);
mx=max(mx,step[a][b]);
}
if(mx&1)cout<<"MM"<<endl;
else cout<<"GG"<<endl;
}
return 0;
}

【HDU3595】GG and MM(博弈论)的更多相关文章

  1. hdu 3595 GG and MM 博弈论

    同时进行,必须操作这就是Every-SG的特点 同样在贾志豪的论文中有提到这种游戏:组合游戏略述——浅谈SG游戏的若干拓展及变形 其中这个游戏特点不仅有必胜和必败,而且有时间长短的博弈,对于自己必胜的 ...

  2. GG and MM HDU - 3595 Every-SG

    $ \color{#0066ff}{ 题目描述 }$ 两堆石子,GG和MM轮流取,每次在一堆石子中取另一堆石子的k\((k\ge1)\)倍,不能操作的输 现在二人要玩n个这样的游戏,每回合每个人对每个 ...

  3. Java网络编程-你是GG还是MM?

    第六阶段 网络编程 每一台计算机通过网络连接起来,达到了数据互动的效果,而网络编程所解决的问题就是如何让程序与程序之间实现数据的通讯与互动 在吗?你是GG还是MM? (一) 网络模型概述 (1) 两大 ...

  4. HDU 3595 GG and MM [Every-SG]

    传送门 题意: 两个数$x,y$,一个人的决策为让大数减去小数的任意倍数(结果不能为负),出现0的人胜 一堆这样的游戏同时玩 Every-SG 游戏规定,对于还没有结束的单一游戏,游戏者必须对该游戏进 ...

  5. 博弈论与SG函数

    巴什博奕: 两个顶尖聪明的人在玩游戏,有n个石子,每人可以随便拿1−m个石子,不能拿的人为败者,问谁会胜利 结论: 设当前的石子数为\(n=k∗(m+1)\)即\(n%(m+1)==0\)时先手一定失 ...

  6. 博弈论题目总结(二)——SG组合游戏及变形

    SG函数 为了更一般化博弈问题,我们引入SG函数 SG函数有如下性质: 1.如果某个状态SG函数值为0,则它后继的每个状态SG函数值都不为0 2.如果某个状态SG函数值不为0,则它至少存在一个后继的状 ...

  7. 博弈论BOSS

    基础博弈的小结:http://blog.csdn.net/acm_cxlove/article/details/7854530 经典翻硬币游戏小结:http://blog.csdn.net/acm_c ...

  8. 每一个可以移动的棋子都要移动——Every-SG 游戏

    先看一个问题 HDU 3595 GG and MM (Every_SG博弈) 题目有N个游戏同时进行,每个游戏有两堆石子,每次从个数多的堆中取走数量小的数量的整数倍的石子.取最后一次的获胜.并且N个游 ...

  9. Codeforces Round #324 (Div. 2) C (二分)

    题目链接:http://codeforces.com/contest/734/problem/C 题意: 玩一个游戏,一开始升一级需要t秒时间,现在有a, b两种魔法,两种魔法分别有m1, m2种效果 ...

随机推荐

  1. Podfile语法参考(译)

    https://www.jianshu.com/p/8af475c4f717 2015.10.30 19:14* 字数 2496 阅读 35976评论 9喜欢 120 本文翻译自官方的Podfile ...

  2. git repository description

    Git - Plumbing and Porcelainhttps://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain gith ...

  3. Jenkins Installing and migration

    JAVA_Zookeeper_hadoop - CSDN博客https://blog.csdn.net/wangmuming Installing Jenkins on Red Hat distrib ...

  4. windows下linux子系统安装

    1.打开Windows功能中的使用于linux的Windows子系统 2.应用商店中下载需要的linux 3.下载完成后运行等待安装并输入用户名密码  4.查看系统信息 先后 sudo apt-get ...

  5. vue-router的简单实现原理

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. npm5踩过的坑!

    1. 版本问题导致环境问题 我们第一次npm install时是根据package.json来安装相关依赖的,但是它里面的版本不固定,因此默认会根据最高的版本来安装相关依赖,但是在npm5是根据pac ...

  7. 简单JQuery+AJAX+Servlet的计算器实现

    index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...

  8. 如何使用Action.Invoke()触发一个Storyboard

    一般在我们的项目中,最好是将Storyboard放在前台,然后设置Storyboard的x:key值,通过我们的TryFindResource来查找到当前的Storyboard来启动Stroyboar ...

  9. Node & CLI

    Node & CLI cli 生成文件的原理是什么 https://nodejs.org/api/cli.html http://nodejs.cn/api/cli.html CLI & ...

  10. Java HashMap的put操作(Java1.8)

    https://www.cnblogs.com/JzedyBlogs/p/10208295.html 写得非常好: 这个是Java1.8 ------------------------------- ...