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 ...
随机推荐
- AtCoder Grand Contest 017 题解
A - Biscuits 题目: 给出 \(n\) 个物品,每个物品有一个权值. 问有多少种选取方式使得物品权值之和 \(\bmod\space 2\) 为 \(p\). \(n \leq 50\) ...
- 学习FPGA需要做哪些
有些人比较差,做了一些介绍,有误导成分.有些人水平太高,介绍的很好,但是很多人依旧听不懂,得到的肯定很少.学习FPGA,在不同层次的人明显有不同的答案. 熟悉硬件描述语言语法,不需要什么都会,但是要记 ...
- 蓝桥杯 算法训练 ALGO-21 装箱问题
算法训练 装箱问题 时间限制:1.0s 内存限制:256.0MB 问题描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每 ...
- ubuntu上安装Adminer
Apache 安装 $ sudo apt-get install apache2 php 安装 $ sudo apt-get install php7.0 $ sudo apt-get install ...
- ISO模型的七个分层
要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主 ...
- php数组指定字段排序
数据全都存放在名为 data 的数组中.这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc(). <?php$data[] = array('volume' => ...
- C++对Lua中table进行读取、修改和创建
C++代码: // LuaAndC.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #i ...
- div+css 左右两列自适应高度 ,以及父级div也跟着自适应子级的高度(兼容各大浏览器)
<style type="text/css" media="screen"> <!-- #main {width:500px;_height: ...
- MSComm 串口
MSComm 串口 http://www.docin.com/p-761416611.html http://blog.sina.com.cn/s/blog_50cfd0fc0102v27p.html
- 英语单词state和status的区别
state:比较常用,各种状态都可以用它,但是它更着重于一种心理状态或者物理状态. Status:用在人的身上一般是其身份和地位,作"状态,情形"讲时,多指政治和商业. state ...