HDU4678_Mine

很有意思,很好的题目。

这样的,一个n*m的扫雷地图,告诉你哪些地方是有雷的。一个人如果点在了空白处,那么与其相邻的(八个方向)的数字以及空白都会递归地显示出来,如果点在数字上面,那么就只会显示这一个数字。

游戏过程中,谁第一个无法点开一个非雷的格子算输。

这、、、、其实可以看成是nim博弈问题,但是有一点点点点的不同。

我们由于题目说明了数字的部分不会有重复的,所以我们把一个由空白部分连成的区域看成是一堆石子,那么有的单独的数字就是一堆石子且只有一颗。

同时我们把所有的空白区域看成是一个石子,这样问题就转化为了给你N堆石子,以及每一堆的石子的数量,现在要你求出博弈的结果是先手胜还是后手胜?

由于每次可选择的可以使一堆中的某一颗石子,也可以是一整堆的石子,所以这与单纯的nim博弈是有所区别的。

其实可以这样来考虑这个问题。

我们分别统计出石子数量为奇数的堆有多少个(x)、石子数为偶数的堆有多少个(y)。

那么其实,除非x和y均为偶数,否则先手必胜。

这样来理解,其实博弈过程中,必胜者只要一直维护所有的石子数之和为偶数即可。

但是如果是一开始就为偶数偶数的话,那么就是必输了。

不知道这么理解对不对呢?

 

 

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 1010
using namespace std;int a[maxn][maxn],t,n,m,k,xi,yi,ans,cas=0,tot,flag;
bool b[maxn][maxn],vis[maxn][maxn];int dfs(int x,int y)
{if (a[x][y]==-1 || x<1 || x>n || y<1 || y>m) return 0;if (b[x][y]) return 0;b[x][y]=true;if (a[x][y]!=0) return 1;return dfs(x+1,y)+dfs(x-1,y)+dfs(x,y+1)+dfs(x,y-1)+dfs(x-1,y-1)+dfs(x-1,y+1)+dfs(x+1,y-1)+dfs(x+1,y+1);
}int main()
{scanf("%d",&t);while (t--){memset(a,0,sizeof a);memset(b,false,sizeof b);memset(vis,false,sizeof vis);scanf("%d%d%d",&n,&m,&k);tot=0;while (k--){scanf("%d%d",&xi,&yi);xi+=1,yi+=1;vis[xi][yi]=true;}for (int i=1; i<=n; i++)for (int j=1; j<=m; j++){if (vis[i][j]){a[i][j]=-1;continue;}a[i][j]=0;for (int ii=-1; ii<=1; ii++)for (int jj=-1; jj<=1; jj++)if (vis[i+ii][j+jj]) a[i][j]++;}ans=0;for (int i=1; i<=n; i++)for (int j=1; j<=m; j++){if (b[i][j]) continue;if (a[i][j]==0){int tep=dfs(i,j)+1;if (tep&1) ans^=1;else ans^=2;tot++;}
            }for (int i=1; i<=n; i++)for (int j=1; j<=m; j++){if (b[i][j]) continue;if (a[i][j]==-1) continue;b[i][j]=true;ans^=1;tot++;
            }if (ans) printf("Case #%d: Xiemao\n",++cas);else printf("Case #%d: Fanglaoshi\n",++cas);}return 0;
}

 

转载于:https://www.cnblogs.com/lochan/p/3450189.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pygame只能编写游戏_游戏框架搭建

游戏框架搭建目标 —— 使用 面相对象 设计 飞机大战游戏类目标明确主程序职责实现主程序类准备游戏精灵组01. 明确主程序职责回顾 快速入门案例&#xff0c;一个游戏主程序的 职责 可以分为两个部分&#xff1a;游戏初始化游戏循环根据明确的职责&#xff0c;设计 PlaneGame 类…

周末阅读:本周热门文章排行榜

那道不清说不尽的故事 iPhone 的创意并非来自乔布斯一人&#xff0c;其起源可以追溯到 Jony 的设计团队对多点触控屏幕的思考和探索&#xff0c;也正是因为对这个技术的看好&#xff0c;在对其在手机上的可行新的不断测试后&#xff0c;苹果最后下定决心进军手机领域。这篇文章…

python3 hash算法使用

python3下的pycryptodome库 from Crypto.cipher import * if __name__ __main__:message 123#MD5和SHA的用法差不多print("SHA3_512: " SHA3_512.new(message.encode(utf-8)).digest().hex())print("SHA512: " SHA512.new(message.encode(utf-8)).dig…

poj3335 半平面交

题意&#xff1a;给出一多边形。判断多边形是否存在一点&#xff0c;使得多边形边界上的所有点都能看见该点。 sol&#xff1a;在纸上随手画画就可以找出规律&#xff1a;按逆时针顺序连接所有点。然后找出这些line的半平面交。 题中给出的点已经按顺时针排好序了&#xff0c;所…

php进程间通信 yoc_续上篇Swoole多进程数据共享的问题

原因进程作为程序执行过程中资源分配的基本单位&#xff0c;拥有独立的地址空间,同一进程的线程可以共享本进程的全局变量&#xff0c;静态变量等数据和地址空间&#xff0c;但进程之间资源相互独立。由于PHP语言不支持多线程&#xff0c;因此Swoole使用多进程模式&#xff0c;…

JavaBean的规范

&#xff08;1&#xff09;JavaBean 类必须是一个公共类&#xff0c;并将其访问属性设置为 public &#xff08;2&#xff09;JavaBean 类必须有一个空的构造函数&#xff1a;类中必须有一个不带参数的公用构造器&#xff0c;此构造器也应该通过调用各个特性的设置方法来设置特…

linux虚拟机ip修改无效

把一个centos虚拟机移动到另一台电脑的时候&#xff0c;移动前是静态ip&#xff0c;移动后发现虚拟机的ip不同了。 由于使用的是NAT&#xff0c;于是就修改了虚拟机的配置&#xff0c;发现虚拟机的ip仍然不是配置文件需要的情况。 可以尝试命令nmcli con show&#xff0c;如果…

验证(Verification)与确认(Validation)的差别

验证(Verification)与确认&#xff08;Validation&#xff09;的差别 说法一&#xff1a; &#xff08;2&#xff09;“验证(Verification)”的涵义 通过提供客观证据对规定要求已得到满足的认定。 &#xff08;2&#xff09;“确认&#xff08;Validation&#xff09;”的涵义…

vscode自动格式化不符合eslint_VsCode(Visual Studio Code)格式化代码符合EsLint

利用Visual Studio Code ESlint插件&#xff0c;实现自动格式化代码步骤一&#xff1a;安装ESlint插件>点击Extensions或者CtrlShiftX>搜索ESlint>install EsLint步骤二: 重启VsCode&#xff0c; 发现代码提示报错&#xff0c;代码不符合规范步骤三&#xff1a;鼠标ho…

解读Google分布式锁服务

背景介绍 在2010年4月&#xff0c;Google的网页索引更新实现了实时更新&#xff0c;在今年的OSDI大会上&#xff0c;Google首次公布了有关这一技术的论文。 在此之前&#xff0c;Google的索引更新&#xff0c;采用的的批处理的方式(map/reduce)&#xff0c;也就是当增量数据达到…

使用PHPMailer邮件发不出去

遇到了PHPMailer发不出去邮件的问题&#xff0c;在执行smtpConnect()时失败了&#xff0c;同样的配置在其他环境就能发送邮件。 最后发现是dns没有配置&#xff0c;解析不了邮箱服务器的域名&#xff0c;所以没发出去。。。。 如果其他语言也遇到了这样的情况&#xff0c;可以…

PHPcurl抓取AJAX异步内容(转载)

PHPcurl抓取AJAX异步内容其实抓ajax异步内容的页面和抓普通的页面区别不大。ajax只不过是做了一次异步的http请求&#xff0c;只要使用firebug类似的工具&#xff0c;找到请求的后端服务url和传值的参数&#xff0c;然后对该url传递参数进行抓取即可。 利用Firebug的网络工具 …

做自适应网站专业乐云seo_自适应网站方案品牌乐云seo

自适应网站方案品牌乐云seo&#xff0c;做乐云seo网站推广哪收录比较稳定&#xff0c;下面小编从以下几点详细介绍一下自适应网站方案品牌乐云seo&#xff1a;一、乐云seo做核心关键词首页排名技术怎么样&#xff1f;孔祥永seo做核心关键词到首页的秘诀就是做好原创内容&#x…

boost windows编译

执行&#xff1a; &#xff08;1&#xff09;bootstrap.bat &#xff08;2&#xff09;b2 -j4 toolsetmsvc-9.0 linkstatic threadingmulti runtime-linkstatic address-model64 stage --stagedir“D:\Code\boost_1_66_0\lib” debug release toolset:msvc-9.0 使用vs2008编…

必应输入法产品分析

2013年4月&#xff0c;微软MSN(中国)宣布推出首款整合搜索体验的中文云输入法“必应Bing输入法”&#xff0c;其前身是“英库拼音输入法(于2012年8月发布测试版)” 在此&#xff0c;Fruits小组从宏观的软件工程角度和微观的产品实现细节对必应输入法进行了考察和分析。 &#x…

这是我第一题AC的线段树

题目简述&#xff1a; 有N个整数&#xff0c;Q次操作&#xff0c;每次操作为询问一个区间[a, b]内数的和(0号操作)或者把一个区间内的数全部加上v(1号操作) 线段树求解即可。 #include <cstdio> #include <algorithm> using std::min; using std::max; #define L(n…

a频繁连接不上redis_连接不到redis Caused by:..._慕课问答

redis装在linux虚拟机上&#xff0c;在xshell上可以成功访问redis&#xff0c;配了密码拿了老师完整的代码作测试&#xff0c;就是访问失败&#xff0c;不知道哪里出了问题地址端口密码都没错的&#xff0c;求解org.springframework.data.redis.RedisConnectionFailureExceptio…

抓localhost包 - rawcap

抓localhost包的话用wireshark好像有点麻烦&#xff0c;所以用rawcap RawCap官网 RawCap下载连接 直接运行&#xff0c;首先根据需要选择监听相应的网卡&#xff0c;然后再填写抓包文件保存的名字

持续集成交付CICD:Jira 发布流水线

目录 一、实验 1.环境 2.GitLab 查看项目 3.Jira 远程触发 Jenkins 实现合并 GitLab 分支 4.K8S master节点操作 5.Jira 发布流水线 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构版本IP备注master1K8S master节点1.20.6192.168.204.180 jenkins…

计算几何_多边形

判定凸多边形&#xff1a;顶点凹凸性法 连续三个顶点p1,p2,p3。计算p1p2,p2p3的叉乘&#xff0c;阶乘大于0&#xff0c;则表示p3点在线段p1和p2的左侧&#xff0c;然后依次计算下一个前后所组成向量的阶乘&#xff0c;如果在计算时&#xff0c;出现负值&#xff0c;则此多边形是…