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的更多相关文章

  1. HDU 4678 Mine SG博弈

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

  2. HDU 4678 Mine (2013多校8 1003题 博弈)

    Mine Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submis ...

  3. HDU 4678 Mine(博弈)

    Mine Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submi ...

  4. hdu 4678 Mine 博弈论

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

  5. 2020杭电多校 10C / HDU 6879 - Mine Sweeper (构造)

    HDU 6879 - Mine Sweeper 题意 定义<扫雷>游戏的地图中每个空白格子的值为其周围八个格子内地雷的数量(即游戏内临近地雷数量的提示) 则一张地图的值\(S\)为所有空白 ...

  6. hdu 4678

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

  7. 2020杭电多校 C / HDU 6879 - Mine Sweeper

    题意: t组输入,每组输入一个s 你需要输出一个r行c列的阵列,这个阵列中'X'代表炸弹,'.'表示没有炸弹 对于'.'这些位置都会有一个数值,这个值取决于这个位置附近8个位置,这8个位置一共有几个炸 ...

  8. 【 2013 Multi-University Training Contest 8 】

    HDU 4678 Mine 对于每个空白区域,求SG值. 最后异或起来等于0,先手必败. #pragma comment(linker,"/STACK:102400000,102400000 ...

  9. 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 ...

随机推荐

  1. 洛谷 P2626 斐波那契数列(升级版)

    题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数). 题目描述 ...

  2. button和input type=button的区别及注意事项

    <button>标签 定义和用法 <button>标签定义一个按钮. 在button元素内部,您可以放置内容,比如文本或图像.这是该元素与使用input元素创建的按钮之间的不同 ...

  3. jslinq 使用总结

    最近一直在用 jslinq 感觉还是不错的.用于增强 Array.find() 上重点: 1: 引用 cnpm install jslinq --save (本人用淘宝镜像--npmFQ感觉也不快-- ...

  4. The type org.springframework.context.ConfigurableApplicationContext cannot be resolved问题解决

    在搭建maven项目的时候,有时候会报这样的问题. The type org.springframework.context.ConfigurableApplicationContext cannot ...

  5. POJ1742:Coins

    浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html 题目传送门:http://poj.org/problem?id=1742 多重背包,每个物 ...

  6. 洛谷 1514 (NOIp2010) 引水入城

    题目:https://www.luogu.org/problemnew/show/P1514 如果有解,一个第一行的格子能覆盖第n行的一定是一个连续的区间. 因为如果不连续,则有围住了一些第n行的格子 ...

  7. Spring、Spring MVC、MyBatis整合文件配置详解2

    使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. Spring:http://spring.io/docs MyBatis ...

  8. 有关Botton的用法(一)

    <Button android:layout_width="wrap_content" android:layout_height="wrap_content&qu ...

  9. protobuff java 包编译(Windows)

    google probuffer的强大,很多人都知道,但是官方的source 里是没有jar下载,唯有源码下载,故需自己编译得到jar. java 的jar的编译采用maven 编译的,因此需先构建m ...

  10. 源码安装ceph后使用测试集群的方法

    标签(空格分隔): ceph,ceph实验,ceph源码 通过博客 源码编译安装ceph(aarch64架构) 成功安装ceph之后,之后可以运行一个测试集群进行实验 1,进入安装构建目录: [roo ...