SG函数博弈——poj2311
关于SG函数的博弈
首先定义必败态
x : SG[x]=0
设任意一个状态y,到所有y能到达的状态连一条边,令这些后继为z
y : SG[y]=mex(SG[z])
SG[y]==0 : y就是必败态
SG[y]!=0 : y就是必胜态
所以博弈时把状态转换成有向图即可
那么n个有向图的情况
SG=SG[1]^SG[2]...^SG[n],即把所有SG异或起来即可
本题就是SG函数的应用:首先三个必败态2*2,2*3,3*2,然后将纸片切成两张等价于两个SG函数的异或
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; int W,H;
int sg[][]; int SG(int w,int h){
if(w==&&h== || w==&&h== || w==&&h==)return sg[w][h]=;//必败态
if(sg[w][h]!=-)return sg[w][h];
int mex[]={};
for(int i=;i<=w-i;i++)//h不变,用两个sg的异或性质
mex[SG(i,h)^SG(w-i,h)]=;
for(int i=;i<=h-i;i++)//w不变
mex[SG(w,i)^SG(w,h-i)]=;
for(int i=;i<=;i++)
if(!mex[i])return sg[w][h]=i;
}
int main(){
memset(sg,-,sizeof sg);
while(cin>>W>>H){
//memset(sg,-1,sizeof sg);
if(SG(W,H)==)cout<<"LOSE"<<endl;
else cout<<"WIN"<<endl;
}
}
SG函数博弈——poj2311的更多相关文章
- 博弈问题之SG函数博弈小结
SG函数: 给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移 动者判负.事实上,这个游戏可以认为是所有Impartial Combinatorial Ga ...
- 【博弈论】【SG函数】poj2311 Cutting Game
由于异或运算满足结合律,我们把当前状态的SG函数定义为 它所能切割成的所有纸片对的两两异或和之外的最小非负整数. #include<cstdio> #include<set> ...
- HDU1536&&POJ2960 S-Nim(SG函数博弈)
S-Nim Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit Status ...
- HDU 5724 Chess (状态压缩sg函数博弈) 2016杭电多校联合第一场
题目:传送门. 题意:有n行,每行最多20个棋子,对于一个棋子来说,如果他右面没有棋子,可以移动到他右面:如果有棋子,就跳过这些棋子移动到后面的空格,不能移动的人输. 题解:状态压缩博弈,对于一行2^ ...
- HDU 5742 Chess SG函数博弈
Chess Problem Description Alice and Bob are playing a special chess game on an n × 20 chessboard. ...
- HDU 1848 SG函数博弈
Fibonacci again and again Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的:F(1 ...
- hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)
Nim or not Nim? Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ...
- Luogu P2148 [SDOI2009]E&D (sg函数 博弈)
题目 洛谷传送门 题解 打表找sgsgsg规律. 严谨证明见:纳尔的博客 CODE #include <bits/stdc++.h> using namespace std; int sg ...
- hdu 4388 Stone Game II sg函数 博弈
Stone Game II comes. It needs two players to play this game. There are some piles of stones on the d ...
随机推荐
- git学习记录1(本地库管理)
学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...
- Ubuntu下安装fcitx+搜狗输入法
转载自:http://www.linuxidc.com/Linux/2013-07/87062.htm 目标:在Ubuntu 13.04以及基于Ubuntu的发行版上安装fcitx小企鹅输入法,并安装 ...
- Map获取键值,Map的几种遍历方法 (转载)
Map类提供了一个称为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集.接着,Map.Entry类提供了一个getKey()方法和一个getValue()方法,Map.E ...
- Array类型中的检测数组,转换方法,栈方法,队列方法
我的新博客==> http://www.suanliutudousi.com/2017/08/24/array%E7%B1%BB%E5%9E%8B%E4%B8%AD%E7%9A%84%E6%A3 ...
- Python3实战spark大数据分析及调度✍✍✍
Python3实战spark大数据分析及调度 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...
- 初识OpenCV-Python - 001
主要用代码注释来初步学习OpenCV-Python 1. 图片初使用(结合matplotlib) import cv2from matplotlib import pyplot as plt #Loa ...
- 16-MySQL-Ubuntu-数据表的查询-分组与聚合(五)
分组(group by)一般与聚合结合使用 (1)查询按性别分组 select gender from students group by gender; (2)查询按性别分组并统计每组的数量sele ...
- SpringCloud学习笔记《---04 Feign---》基础篇
- Linux 常用命令:文本查看篇
前言 Linux常用命令中,除了cat还有很多其他用于文本查看的命令.本文将简单介绍一下这些文本查看的命令. 全文本显示--cat cat可能是常用的一个文本查看命令了,使用方法也很简单: cat f ...
- day17 文件处理及简单函数
Python之路,Day5 = Python基础5 常亮 用大写来做提示 chr() # 数字转字符ord() # 字符转数字 读文件 要以读文件的模式打开一个文件对象,使用Python内置的open ...