hdu 4678 Mine 博弈论
这是一题简单的博弈论!!
所有的空白+边界的数字(个数为n)为一堆,容易推出其SG函数值为n%2+1;
其他所有的数字(个数为m)的SG值为m%2。
再就是用dfs将空白部分搜一下即可!(注意细节)
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define MAX 1005
#pragma comment(linker,"/STACK:1024000000,1024000000")
using namespace std;
int vis[MAX][MAX],m,n,k,tot,cnt,ans,num;
int d[][]={{-,-},{-,},{-,},{,-},{,},{,-},{,},{,}};
int cal(int i,int j)
{
int ans=;
if(i->=){
ans+=(vis[i-][j]==-);
if(j->=) ans+=(vis[i-][j-]==-);
if(j+<m) ans+=(vis[i-][j+]==-);
}
if(j->=){
ans+=(vis[i][j-]==-);
if(i+<n) ans+=(vis[i+][j-]==-);
}
if(j+<m){
ans+=(vis[i][j+]==-);
if(i+<n) ans+=(vis[i+][j+]==-);
}
if(i+<n) ans+=(vis[i+][j]==-);
return ans;
}
void dfs(int a,int b)
{
int t,u,v;
if(vis[a][b]==-) return;
if(vis[a][b]>=){
vis[a][b]=-;
num++;tot++;
return;
}
if(vis[a][b]==-){
t=cal(a,b);
tot++;
vis[a][b]=-;
if(t==){
for(int i=;i<;i++){
u=a+d[i][];
v=b+d[i][];
if(u>=&&u<n&&v>=&&v<m)
dfs(u,v);
}
}
else{
num++;
return ;
}
}
else return ;
}
void solve()
{
int i,j,k,u,v;
tot=;cnt=;ans=;
for(i=;i<n;i++){
for(j=;j<m;j++){
if(vis[i][j]==-){
int t=cal(i,j);
if(t>) vis[i][j]=t;
else{
tot++;cnt++;
num=;
vis[i][j]=-;
for(k=;k<;k++){
u=i+d[k][];
v=j+d[k][];
if(u>=&&u<n&&v>=&&v<m)
dfs(u,v);
}
ans^=(num%+);
}
}
}
}
return ;
}
int main(){
int t,i,j,u,v,w=;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&k);
for(i=;i<n;i++)
for(j=;j<m;j++)
vis[i][j]=-;
for(i=;i<k;i++){
scanf("%d%d",&u,&v);
vis[u][v]=-;
}
solve();
int ans1=(n*m-k-tot)%;
printf("Case #%d: ",++w);
if(ans1^ans) puts("Xiemao");
else puts("Fanglaoshi");
}
return ;
}
hdu 4678 Mine 博弈论的更多相关文章
- hdu 4678 Mine
HDU 4678 把点开空地时会打开的一大片区域看成一块,题目中说到,在一盘游戏 中,一个格子不可能被翻开两次,说明任意两块空地不会包含相同的格子. 那么就可以看成一个组合游戏. 当空地旁边没连任何数 ...
- HDU 4678 Mine SG博弈
http://acm.hdu.edu.cn/showproblem.php?pid=4678 自己太蠢...没学SG...还是浩神指点我SG精髓以后才A的这题...(第一题SG 这里子游戏之间没有影响 ...
- HDU 4678 Mine (2013多校8 1003题 博弈)
Mine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submis ...
- HDU 4678 Mine(博弈)
Mine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submi ...
- 2020杭电多校 10C / HDU 6879 - Mine Sweeper (构造)
HDU 6879 - Mine Sweeper 题意 定义<扫雷>游戏的地图中每个空白格子的值为其周围八个格子内地雷的数量(即游戏内临近地雷数量的提示) 则一张地图的值\(S\)为所有空白 ...
- HDU 5512 Meeting 博弈论
Meeting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5512 ...
- hdu 4664 Triangulation 博弈论
看到这题时,当时还不会做,也没搞懂sg函数,于是狠狠的钻研了下博弈论,渐渐的知道了sg函数…… 现在在来做这题就很容易了,1A 打表容易发现在80左右的时候就出现循环节了 代码如下: #include ...
- hdu 4678
HDU 4768: Flyer 题意: 有N个社团,每个社团三个属性A,B,C,表示会向编号A+k*C的同学发传单(k=0,1,2... && A+k*C <= B).题目保证 ...
- hdu 4023 Game 博弈论
思路: 将15种分成5类: 1.1和2为一类: 2.3,4,5,6为一类: 3.7,8,9,10为一类: 4.11,12,13,14,15为一类: 5.15为一类. 比较各类的优先级,就会发现放置的顺 ...
随机推荐
- HTML标签语义化
标签语义化 Web语义化是指使用语义恰当的标签,使页面有良好的结构,页面元素有含义,能够让人和搜索引擎都容易理解. 如果可以在合适的位置使用恰当的标签,那么写出来的页面语义明确,结构清晰,搜索引擎也可 ...
- OpenCV基本架构[OpenCV 笔记0]
最近正在系统学习OpenCV,将不定期发布笔记,主要按照毛星云的<OpenCV3编程入门>的顺序学习,会参考官方教程和文档.学习工具是Xcode+CMake,会对书中一部分内容更正,并加入 ...
- AspectJ的简单使用
aspectj是一款优秀的面向切面的编程框架,下面就简单介绍一下入门教程吧: 1.官网下载AspectJ的jar包,我这里下的是最新版本1.8.7的. 2.因为AspectJ.jar 是一个可执行的j ...
- Brackets - 又一款牛x的WEB开发编辑器
Brackets官网下载: http://brackets.io/ Adobe Brackets是由Adobe主导开发一款主打web开发的编辑器. 是继TextMate,Sublime Text这两个 ...
- .net 将excel转成html文件
最近在做一个打印预览功能,但是开始没有头绪后来用excel做了一个模板,然后根据excel模板来生成新的excel并将其存储为html,可以通过http请求在浏览器中读取,并且打印,其他的不多说.方法 ...
- Linux下SCP的使用
一.下载远程文件到本地 scp -i /Users/user/ssh/id_rsa root@192.168.1.8:/root/talk_server_redis/dump.rdb /Users/k ...
- HTML 中的字符集、ASCII、 ISO-8859-1、符号之间的关系和 HTML URL 编码注意的事项
一.HTML 实体 1.什么是HTML 实体? 在 HTMl 中,某些字符是保留的.小于号 (<) 和 大于号 (>), 浏览器会误认为是标签 如果希望正确地显示预留字符,必须在 HTML ...
- http返回状态代码及含义
“100″ : Continue(继续) 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) “101″ : Switching Protocols(切换协议) 请求者已要求服 ...
- 2、[转]WPF与WinForm的比较
http://www.cnblogs.com/KnightsWarrior/archive/2010/07/09/1774059.htmlhttp://www.cnblogs.com/zenghong ...
- C# asp Aspose.Cells 教程,包含增加勾选框,单元格,字体设置
1,引用Aspose.Cells dll 2,using Aspose.Cells; 3, Workbook excel = new Workbook(); string strFilePath = ...