hdu 4678 Mine
HDU 4678
把点开空地时会打开的一大片区域看成一块,题目中说到,在一盘游戏
中,一个格子不可能被翻开两次,说明任意两块空地不会包含相同的格子。
那么就可以看成一个组合游戏。
当空地旁边没连任何数字的时候,sg = 1(直接转移到 0)。如果有一个
数字,点空地可以转移到 0,点数字可以转移到 1,所以 sg = 2。有 2 个数
字点空地转移到 0,点数字转移到 2,所以 sg = 1。
以此类推,空地旁边有奇数个数字的时候,sg = 2,否则 sg = 1。
剩下的没与空地相连的数字,每个的 sg 都是 1。
那么将所有空地的 sg 异或起来,再异或 (不与空地相连的数字个数对 2
取模),等于零输出后手赢,大于 0 输出先手赢即可。
#include<stdio.h>
#include<string.h>
#pragma comment(linker,"/STACk:1024000000,1024000000")
int map[][];
//bool flag[1100][1100];
int f[][]= {{,},{,-},{-,},{-,},{-,-},{,-},{,},{,}};
int n,m;
int tmp;
int dfs(int i,int j)
{
map[i][j]=;
for(int k=; k<; k++)
{
int x=i+f[k][];
int y=j+f[k][];
if(x>=&&y>=&&x<m&&y<n)
{
if(map[x][y]==)
{
map[x][y]=;
tmp++;
}
else if(!map[x][y])dfs(x,y);
}
}
return ;
}
void myprintf()
{
for(int i=;i<m;i++)
{ for(int j=;j<n;j++)
printf("%d ",map[i][j]);
printf("\n");
} }
int main()
{
int _case,ij;
int ki,i,j,xi,yi;
scanf("%d",&_case);
for(ij=; ij<=_case; ij++)
{
memset(map,,sizeof(map));
int ans=;
scanf("%d%d%d",&m,&n,&ki);
for(i=; i<ki; i++)
{
scanf("%d%d",&xi,&yi);
map[xi][yi]=;
for(int k=; k<; k++)
{
int x=xi+f[k][];
int y=yi+f[k][];
if(x>=&&y>=&&x<m&&y<n)
{
if(!map[x][y])map[x][y]=;
}
}
}
for(i=;i<m;i++)
{
for(j=;j<n;j++)
if(!map[i][j])
{
tmp=; dfs(i,j);
//printf("##%d\n",tmp);
if(tmp&)ans^=;
else ans^=;
}
} int ans1=;
//int ans2=0;
//myprintf();
for(i=;i<m;i++)
{
for(j=;j<n;j++)
{
if(map[i][j]==)ans1++;
}
}
ans1%=;
ans^=ans1;
printf("Case #%d: ",ij);
if(ans)printf("Xiemao\n");
else printf("Fanglaoshi\n");
}
return ;
}
/*
//求sg函数值代码如下
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
#define maxn 1111
int sg[maxn];//sg[i]表示由一个空白区域加上i-1个边缘数字区的sg值
int vis[maxn];
void init()
{
int i,j,k;
sg[0]=0;
sg[1]=1;
for(i=2;i<1000;i++)
{
memset(vis,0,sizeof(vis));
vis[sg[i-1]]=1; //点击数字区域
vis[0]=1; //点击空白区域,后继状态必败
for(j=0;;j++)
if(vis[j]==0)
{
sg[i]=j;
break;
}
}
for(i=0;i<20;i++)
cout<<sg[i]<<" ";
cout<<endl;
}
int main()
{
init();
return 0;
}
//SG值:0 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1
*/
hdu 4678 Mine的更多相关文章
- 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 ...
- hdu 4678 Mine 博弈论
这是一题简单的博弈论!! 所有的空白+边界的数字(个数为n)为一堆,容易推出其SG函数值为n%2+1: 其他所有的数字(个数为m)的SG值为m%2. 再就是用dfs将空白部分搜一下即可!(注意细节) ...
- 2020杭电多校 10C / HDU 6879 - Mine Sweeper (构造)
HDU 6879 - Mine Sweeper 题意 定义<扫雷>游戏的地图中每个空白格子的值为其周围八个格子内地雷的数量(即游戏内临近地雷数量的提示) 则一张地图的值\(S\)为所有空白 ...
- hdu 4678
HDU 4768: Flyer 题意: 有N个社团,每个社团三个属性A,B,C,表示会向编号A+k*C的同学发传单(k=0,1,2... && A+k*C <= B).题目保证 ...
- 2020杭电多校 C / HDU 6879 - Mine Sweeper
题意: t组输入,每组输入一个s 你需要输出一个r行c列的阵列,这个阵列中'X'代表炸弹,'.'表示没有炸弹 对于'.'这些位置都会有一个数值,这个值取决于这个位置附近8个位置,这8个位置一共有几个炸 ...
- 【 2013 Multi-University Training Contest 8 】
HDU 4678 Mine 对于每个空白区域,求SG值. 最后异或起来等于0,先手必败. #pragma comment(linker,"/STACK:102400000,102400000 ...
- hdu 4739 Zhuge Liang's Mines 随机化
Zhuge Liang's Mines Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.p ...
随机推荐
- LA4992 Jungle Post
题意 PDF 分析 炸连续的比炸单独的好. 二分答案,每种炸连续的构成一些半平面,判断半平面交是否为空. 时间复杂度\(O(T n \log^2)\) 代码 这题卡常,排序的时候必须事先算出幅角,不然 ...
- c&c++ datetime
时间函数之间的关系 struct tm { int tm_sec; // 代表目前秒数,正常范围0-59,但允许至61秒: int tm_min; // 代表目前分数,范围为0-59. int tm_ ...
- selenium - 截取页面图片和截取某个元素的图
1.截取页面图片并保存 在测试过程中,是有必要截图,特别是遇到错误的时候进行截图. # coding:utf-8 from time import sleep from PIL import Imag ...
- cpu 核数及逻辑数统计
查看逻辑CPU个数:cat /proc/cpuinfo |grep "processor"|sort -u|wc -l24 查看物理CPU个数:grep "physica ...
- HTTP/HTTPS原理详解
简介 HTTP(Hypertext Transfer Protocal,超文本传输协议)是WWW(World Wide Web,万维网)数据传输的基础,规定如何传输超文本.HTTP协议存在多个版本:H ...
- linux(centos7) 安装nginx
linux(centos7) 安装nginx 1.14(stable) 版本 Nginx配置文件常见结构的从外到内依次是「http」「server」「location」等等,缺省的继承关系是从外到内, ...
- spring mvc 返回字符串带双引号及StringHttpMessageConverter乱码处理
本文转载自:http://blog.csdn.net/wangyangbto/article/details/48804155 很多人都碰到过,SpringMVC使用 @ResponseBody 注解 ...
- (转)Oracle存储过程中的事务
本文转载自:http://www.cnblogs.com/linjiqin/archive/2011/04/18/2019990.html 1.事务用于确保数据的一致性,由一组相关的DML语句组成,该 ...
- xunsearch搜索使用
目录 如何开始搜索? 典型处理 快捷操作 搜索中的串接操作 构建搜索语句 如何开始搜索? <?php // 引入 require_once './sdk/xs/lib/XS.php'; // 创 ...
- 如果axios请求失败,如何获取后端接口返回的状态码及错误信息
这两天在工作中遇到一个问题,一个请求返回400错误,我需要向用户展示后端返回的错误信息,但是用普通的catch方法只能获取到浏览器返回的400错误提示,不能获取到后端返回的,后经查阅得出下面方法: a ...