链接:题意就是告诉你一个扫雷图里面每个雷的位置,有两个人,每个人都知道雷的确切位置,每个人一次可以点一部,问你谁能赢。

链接:http://acm.hdu.edu.cn/showproblem.php?pid=4678

思路:整张图有三种格子,一种是空白,一种是带数字的,一种是雷。我们可以根据雷知道整张地图。如果我们点空白那么跟空白连通的数字(不可能有雷)和空白都会显示出来。也就是说数字又可以分为跟空白连着的和不连着的。整个游戏的输赢是与这局所走的总步数有着直接关系,如果是偶数那么后手赢,否则先手赢。那么与空白连着的数字一定被点与否一定会决定着真个游戏的走势,而不与空白相连的数字不管奇偶性都是要被点,他们的奇偶性是不能自身发生改变的。因为每个人都想赢,先手就要将总步数变为奇数,也就是说(空白+被其点的周围数字+独立数字)%2 == 1,而后手相反。假如独立数字是奇数,那么第一个人一定会使空白+期周围数字为偶数,方法就是在空白被点掉前要点掉一个周围数字,而第二个人为了维持步数为偶数他也会点掉数字,也就是说空白周围的数字会影响局势。而我们也可以发现当周围为偶数事,这些数字相当于没有只有空白一个会影响局势,而周围为奇数时,这个空白回影响局势。所以我们只要计算周围数字为奇数的空白个数就可以了,另外偶数的相当于一个独立的数,也就是说当周围数字个数为奇数的空白快的块数为偶数时,那么第一个人赢就要看独立数字和偶数空白数了、

另外注意加扩栈指令

代码:

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#define loop(s,i,n) for(i = s;i < n;i++)
#define cl(a,b) memset(a,b,sizeof(a))
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
int map[][];
int vis[][];
int n,m,k;
int num,odd,uod;
int to[][] = {{,},{,-},{,},{,-},{,},{-,-},{-,,},{-,}};
int judge(int a,int b)
{
if(a >= && a < n && b>= &&b < m)
return ;
return ;
}
void paint(int x,int y)
{
int i,j;
for(i = ;i < ;i++)
{
int a,b;
a = x+to[i][];
b = y+to[i][];
if(judge(a,b) && !vis[a][b])
map[a][b]++;
}
}
void dfs(int x,int y)
{
if(map[x][y] == - || vis[x][y])
return; vis[x][y] = ;
int i;
for(i = ;i < ;i++)
{
int a,b;
a = x+to[i][];
b = y+to[i][];
if(judge(a,b)&&vis[a][b] == )
{
if(map[a][b] > )
num++,vis[a][b] = ;
else if(map[a][b] == )
dfs(a,b);
}
}
return;
}
int main()
{
int t,i,j,x,y;
// freopen("data.txt","r",stdin);
//freopen("data1.txt","w",stdout);
scanf("%d",&t);
int icase = ;
while(t--)
{
scanf("%d %d %d",&n,&m,&k);
loop(,i,n)
{
loop(,j,m)
map[i][j] = vis[i][j] = ;
}
while(k--)
{
scanf("%d %d",&x,&y);
map[x][y] = -;
vis[x][y] = ;
paint(x,y);
}
odd = uod = ;
///*
loop(,i,n)
{
loop(,j,m)
{
num = ;
if(map[i][j] == && !vis[i][j])
{
dfs(i,j);
if(num%)
odd++;
else
uod++;
}
}
}//*/
loop(,i,n)
{
loop(,j,m)
{
if(!vis[i][j] && map[i][j] > )
uod++;
}
}
printf("Case #%d: ",++icase);
if(uod% || odd%)
puts("Xiemao");
else
puts("Fanglaoshi");
}
return ;
}

hdu4678 Mine 规律或者博弈。(博弈的sg函数不懂我是找的规律)的更多相关文章

  1. 博弈论 | 详解搞定组合博弈问题的SG函数

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天这篇是算法与数据结构专题的第27篇文章,我们继续深入博弈论问题.今天我们要介绍博弈论当中非常重要的一个定理和函数,通过它我们可以解决许多 ...

  2. hdu 1847 博弈基础题 SG函数 或者规律2种方法

    Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  3. 【转】博弈问题及SG函数(真的很经典)

    博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要 ...

  4. (转)博弈问题与SG函数

    博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要 ...

  5. 博弈问题之SG函数博弈小结

    SG函数: 给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移 动者判负.事实上,这个游戏可以认为是所有Impartial Combinatorial Ga ...

  6. 转载--博弈问题及SG函数(真的很经典)

    博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要 ...

  7. Light OJ 1296:Again Stone Game(SG函数打表找规律)

    Alice and Bob are playing a stone game. Initially there are n piles of stones and each pile contains ...

  8. 【博弈论】【SG函数】【找规律】Gym - 101147A - The game of Osho

    以后这种题还是不能空想,必须打个表看看,规律还是比较好找的……具体是啥看代码.用SG函数暴力的部分就不放了. #include<cstdio> using namespace std; i ...

  9. bzoj 1228 [SDOI2009]E&D SG函数打表 找规律

    题目链接 Description 桌子上有2n 堆石子,编号为1..2n.将第2k-1 堆与第2k 堆(1 ≤ k ≤ n)为同一组.第i堆的石子个数用一个正整数Si表示.一次分割操作指的是,从桌子上 ...

随机推荐

  1. 使用Echarts进行可视化的数据线呈现

    由于游戏后台需要统计游戏玩家的支付情况,恰好那天看见同学群里聊天说到了Echarts,于是我就看了眼,一看,哟,还是百度的产品,看了文档,示例,确实很屌的样子啊,于是自己就开始试了,最终效果如下: 个 ...

  2. Andriod实现推送的解决方案(转)

    Andriod上实现消息推送的一般解决策略 第一种解决方案:C2DM云端推送功能 在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务,该服务 ...

  3. Jquery Easy UI Datagrid 上下移动批量保存数据

    DataGrid with 上下移动批量保存数据 通过前端变量保存修改数据集合,一次性提交后台执行 本想结合easyui 自带的$('#dg').datagrid('getChanges'); 方法来 ...

  4. eclipse上的.properties文件中文编辑显示处理

    最近在对接银联备份金,将相应的SDK导入到eclipse后,打开.properties文件中文注释变成了如下样子,很不方便查阅参照: 平常开发我们希望看到的是如下样子,很直观能明确配置的参数代表的信息 ...

  5. python单元测试框架pytest——fixture函数(类似unitest的setup和teardown)

    pytest的setup和teardown函数(曾被一家云计算面试官问到过). pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作.与python自带的unitest ...

  6. 解决Linux 下server和client 通过TCP通讯:accept成功接收却报错的问题

    今天在写简单的TCP通讯例子的时候,遇到了一个问题:server 和client能够连接成功,并且client也能够正常发送,但server就是接收不到,在网上搜索一番后,终于解决了问题.在这里整理如 ...

  7. 20145310 《Java程序设计》第6周学习总结

    20145310 <Java程序设计>第6周学习总结 教材学习内容总结 本周主要进行第十章和第十一章的学习. 第十章 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流 ...

  8. 20145314郑凯杰 《Java程序设计》实验二 实验报告

    20145314郑凯杰 <Java程序设计>实验二 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...

  9. 20145329 《Java程序设计》实验二总结

    实验指导教师:娄嘉鹏老师 实验日期:2016.4.12 实验时间:15:30~17:30 实验序号:实验二 实验名称:Java面向对象程序设计 实验目的与要求: 1.初步掌握单元测试和TDD 2.理解 ...

  10. arm-linux工具

    arm-linux工具的功能如下: arm-linux-addr2line 把程序地址转换为文件名和行号.在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上 ...