Mine

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 1731    Accepted Submission(s): 501

Problem Description
Have you ever played a game in Windows: Mine?
This game is played on a n*m board, just like the Pic(1)


On the board, Under some grids there are mines (represent by a red flag). There are numbers ‘A(i,j)’ on some grids means there’re A(i,j) mines on the 8 grids which shares a corner or a line with gird(i,j). Some grids are blank means there’re no mines on the 8 grids which shares a corner or a line with them.
At the beginning, all grids are back upward.
In each turn, Player should choose a back upward grid to click.
If he clicks a mine, Game over.
If he clicks a grid with a number on it , the grid turns over.
If he clicks a blank grid, the grid turns over, then check grids in its 8 directions.If the new grid is a blank gird or a grid with a number,it will be clicked too.
So If we click the grid with a red point in Pic(1), grids in the area be encompassed with green line will turn over.
Now Xiemao and Fanglaoshi invent a new mode of playing Mine. They have found out coordinates of all grids with mine in a game. They also find that in a game there is no grid will turn over twice when click 2 different connected components.(In the Pic(2), grid at (1,1) will turn over twice when player clicks (0,0) and (2,2) , test data will not contain these cases).
Then, starting from Xiemao, they click the grid in turns. They both use the best strategy. Both of them will not click any grids with mine, and the one who have no grid to click is the loser.
Now give you the size of board N, M, number of mines K, and positions of every mine Xi,Yi. Please output who will win.
 
Input
Multicase
The first line of the date is an integer T, which is the number of the text cases. (T<=50)
Then T cases follow, each case starts with 3 integers N, M, K indicates the size of the board and the number of mines.Then goes K lines, the ith line with 2 integer Xi,Yi means the position of the ith mine.
1<=N,M<=1000 0<=K<=N*M 0<=Xi<N 0<=Yi<M
 
Output
For each case, first you should print "Case #x: ", where x indicates the case number between 1 and T . Then output the winner of the game, either ”Xiemao” or “Fanglaoshi”. (without quotes)
 
Sample Input
2
3 3 0
3 3 1
1 1
 
Sample Output
Case #1: Xiemao
Case #2: Fanglaoshi
 
Source
 
    给出一幅扫雷的地图,告诉你地雷所在位置,两个人轮流点击非炸弹且未显示出来的方格。点击的是空白格子的话会触发八联通格子的点击(如果他们未显示的话),点击的是数字格的话则只会显示点击的这一个格子,不再触发其他的操作。问先手是否处于胜态。
   可以将这个问题划分为一块块的小地图,所有联通的空白格和与他们相邻的数字格是一个独立的游戏,(除去他们之后单独的一个数字格也看作是一个独立的游戏),他们之间不会影响。只要计算出这些子问题的sg值就能推出胜态了。对于独立的一个数字格,sg=1。对于另一种情况,通过枚举可以发现,sg=(子地图中的数字格的数量)%2+1;
 
  一开始dfs一直mle,换成了bfs就好了。还有注意地图是[0][0]开始的,,c。
  

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <set>
#include <queue>
#include <stack>
using namespace std;
#define mp make_pair
#define pii pair<int,int>
int n,m,tot;
int e[][];
bool vis[][];
int fx[][]={-,,,,,-,,,-,-,-,,,-,,};
void bfs(int x,int y){
queue<pair<int,int> >q;
q.push(mp(x,y));
while(!q.empty()){
pii tmp=q.front();
q.pop();
if(vis[tmp.first][tmp.second]) continue;
vis[tmp.first][tmp.second]=;
if(e[tmp.first][tmp.second]==) {tot++;continue;}
for(int i=;i<;++i){
int dx=tmp.first+fx[i][];
int dy=tmp.second+fx[i][];
if(dx<||dy<||dx>n||dy>m||vis[dx][dy]) continue;
q.push(mp(dx,dy));
}
}
}
int main(){
int t,i,j,k,cas=;
cin>>t;
while(t--){
memset(vis,,sizeof(vis));
memset(e,,sizeof(e));
cin>>n>>m>>k;
int x,y;
while(k--){
scanf("%d%d",&x,&y);
x++;
y++;
vis[x][y]=;
e[x][y]=;
for(i=;i<;++i){
int dx=x+fx[i][];
int dy=y+fx[i][];
if(dx>&&dy>&&dx<=n&&dy<=m&&vis[dx][dy]==) e[dx][dy]=;
}
}
int sg=;
for(i=;i<=n;++i){
for(j=;j<=m;++j){
if(vis[i][j]||e[i][j]==) continue;
tot=;
bfs(i,j);
sg^=(tot%+);
}
}
for(i=;i<=n;++i)
for(j=;j<=m;++j)
if(!vis[i][j]&&e[i][j]==) sg^=;
printf("Case #%d: ",++cas);
sg?puts("Xiemao"):puts("Fanglaoshi");
}
return ;
}
  

hdu-4678-sg的更多相关文章

  1. hdu 4678 Mine

    HDU 4678 把点开空地时会打开的一大片区域看成一块,题目中说到,在一盘游戏 中,一个格子不可能被翻开两次,说明任意两块空地不会包含相同的格子. 那么就可以看成一个组合游戏. 当空地旁边没连任何数 ...

  2. hdu 5724 SG+状态压缩

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  3. HDU 4678 Mine SG博弈

    http://acm.hdu.edu.cn/showproblem.php?pid=4678 自己太蠢...没学SG...还是浩神指点我SG精髓以后才A的这题...(第一题SG 这里子游戏之间没有影响 ...

  4. hdu 2147 SG函数打表(手写也可以) 找规律

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/1000 K (Java/Others) Total ...

  5. HDU 1848 SG函数博弈

    Fibonacci again and again Problem Description   任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的:F(1 ...

  6. hdu 3032 sg打表找规律 *

    有n堆石子,alice先取,每次可以选择拿走一堆石子中的1~x(该堆石子总数) ,也可以选择将这堆石子分成任意的两堆.alice与bob轮流取,取走最后一个石子的人胜利. 打表代码: #include ...

  7. HDU 1536 sg函数

    S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  8. hdu 4678 Mine 博弈论

    这是一题简单的博弈论!! 所有的空白+边界的数字(个数为n)为一堆,容易推出其SG函数值为n%2+1: 其他所有的数字(个数为m)的SG值为m%2. 再就是用dfs将空白部分搜一下即可!(注意细节) ...

  9. hdu 1536 SG函数模板题

    S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  10. hdu 4678

    HDU 4768: Flyer 题意: 有N个社团,每个社团三个属性A,B,C,表示会向编号A+k*C的同学发传单(k=0,1,2...  && A+k*C <= B).题目保证 ...

随机推荐

  1. 禁止火狐浏览器缓存input标签方法

    禁止火狐浏览器缓存input标签方法 问题1:在火狐浏览器里,云平台的输入框.选项框.勾选框…填写之后按F5刷新页面,之前填的东西会保留着,其它浏览器不会火狐强制刷新用Ctrl + F5 浏览器自动保 ...

  2. MockWebServer--环境

    MockWebServer是一个可脚本化的用于测试HTTP客户端的Web服务器.主要用于测试你的应用在进行HTTP.HTTPS请求时是否按照预期的行为动作.使用该工具,你可以验证应用的请求是否符合预期 ...

  3. 03:requests与BeautifulSoup结合爬取网页数据应用

    1.1 爬虫相关模块命令回顾 1.requests模块 1. pip install requests 2. response = requests.get('http://www.baidu.com ...

  4. Win32程序支持命令行参数的做法(转载)

    转载:http://www.cnblogs.com/lanzhi/p/6470406.html 转载:http://blog.csdn.net/kelsel/article/details/52759 ...

  5. Excel中的基本概念

    Excel的相关概念工作薄:由若干个工作表组成,一个工作薄就是一个Excel文件.启动Excel或者新建文档时,Excel建立的缺省工作簿文件名为book1,book2,……其扩展名为xls工作薄内工 ...

  6. 论文笔记——Rethinking the Inception Architecture for Computer Vision

    1. 论文思想 factorized convolutions and aggressive regularization. 本文给出了一些网络设计的技巧. 2. 结果 用5G的计算量和25M的参数. ...

  7. 用python + hadoop streaming 编写分布式程序(三) -- 自定义功能

    又是期末又是实训TA的事耽搁了好久……先把写好的放上博客吧 相关随笔: Hadoop-1.0.4集群搭建笔记 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍 ...

  8. [Pytorch]Pytorch的tensor变量类型转换

    原文:https://blog.csdn.net/hustchenze/article/details/79154139 Pytorch的数据类型为各式各样的Tensor,Tensor可以理解为高维矩 ...

  9. struts框架的运行原理和流程

    从此图中简单描述一下struts2的运行流程:1.客户端请求一个HttpServletRequest的请求,如在浏览器中输入http://localhost: 8080/bookcode/Reg.ac ...

  10. @SuppressWarings注解的作用和用法

    一.前言 编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的“感叹号”就严重阻碍了我们判断该行是否设置的断点了.这时我们可以在方法前添加 @SuppressWar ...