【洛谷】P1488 肥猫的游戏(博弈论+全网最详细!!!)
题目描述
野猫与胖子,合起来简称肥猫,是一个班的同学,他们也都是数学高手,所以经常在一起讨论数学问题也就不足为奇了。
一次,野猫遇到了一道有趣的几何游戏题目,便拿给胖子看。游戏要求在一个有 n 个顶点凸多边形上进行,这个凸多边形的 n-3n−3 条对角线将多边形分成 n-2个三角形,这 n-3 条对角线在多边形的顶点相交。三角形中的一个被染成黑色,其余是白色。
双方轮流进行游戏,当轮到一方时,他必须沿着画好的对角线,从多边形上切下一个三角形。切下黑色三角形的一方获胜。胖子一看觉得确实很有趣,不如就一起玩玩吧。假设游戏由野猫先开始,那么野猫是否有必胜的策略呢?请写一个程序帮助野猫算一算。
输入格式
第一行为一个整数 nn,表示多边形的顶点数,多边形的顶点由 0 至 n-1 顺时针标号。
接着的 n-2 行描述组成多边形的三角形。第 i+1 行(1≤i≤n−2) 有三个空格分隔的非负整数 a、b、c ,它们是第 ii 个三角形的顶点编号。第一个给出的三角形是黑色的。
输出格式
只有一行,倘若野猫有必胜策略,输出 JMcat Win
;否则,输出 PZ Win
(注意大小写和空格)。
输入输出样例
输入
6
0 1 2
2 4 3
4 2 0
0 5 4
输出
JMcat Win
说明/提示
4≤n≤5×104。
如果连接一个多边形中任意两点的线段都完全包含于这个多边形,则称这个多边形为凸多边形。
解题思路:
如果博弈论题目没有明显的解题思路,也没有明显的模板可以套用,那么我们就采用自底向上找规律的思路
我们发现最小的是四边形,会分成两个三角形,先手必胜(因为两个三角形都裸露在外面)
如果是五边形,如果黑色三角形裸露在外面,还是先手必胜,如果黑色三角形被包裹在里面,先手切一个就变成了四边形,变成了上面后手必胜的局面
如果是六边形,还是如果黑色裸露在外面,先手必胜,如果不是,先手一定不希望第一刀就把黑色漏在外面,他一定会选择让这个图形变成黑色三角形包裹在里面的五边形,这时候根据前者可知先手必胜
……
通过总结以上我们就可以很清晰的发现解题的规律了,如果这个黑色三角形裸露在外面,则先手必胜,否则判断n的奇偶性,如果是偶数先手必胜,反之后手必胜
另外一开始找出这个规律我就一直在想怎么处理裸露在外面的三角形,想了很久也没有好的方法,觉得自己写的太笨了,就想着去看看题解,看看别人怎么写的,结果发现这个题目是有点问题的,洛谷的数据只要单纯判断奇偶就可以ac,然后我能找到的所有判断裸露三角形的都有bug,假如说五边形,如果说他给的黑色三角形的三点是0 1 4,这个也是裸露在外面的,一个在0的左边,一个在0的右边
下面附上ac代码
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <queue>
#include <cstdio>
using namespace std;
typedef long long ll;
const ll M=1e7;
const int mod=1e9+7;
ll a[4];
int main()
{std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);ll n;cin>>n;ll x,y,z;for(ll i=1;i<=n-2;i++){cin>>x>>y>>z;if(i==1)a[1]=x,a[2]=y,a[3]=z;}sort(a+1,a+1+3);if((a[1]==0&&a[2]==n-2&&a[3]==n-1)||(a[1]+1==a[2]&&a[2]+1==a[3])||(a[1]==0&&a[2]==1&&a[3]==n-1))puts("JMcat Win");else if((n-2)%2==1)puts("PZ Win");elseputs("JMcat Win");return 0;
}
【洛谷】P1488 肥猫的游戏(博弈论+全网最详细!!!)相关推荐
- P1488 肥猫的游戏
P1488 肥猫的游戏 https://www.luogu.org/problem/P1488 博弈论 一个三角形,只有三种情况: 1邻接,2邻接,3邻接 主要是2邻接的情况比较麻烦边<0,n- ...
- 洛谷P1129 [ZJOI2007] 矩阵游戏 题解
洛谷P1129 [ZJOI2007] 矩阵游戏 题解 题目链接:P1129 [ZJOI2007] 矩阵游戏 题意:给定一张有黑白棋子的正方形棋盘,问存不存在解法使得经过若干次交换行或列的操作后,左上角 ...
- 洛谷解题P1000 超级玛丽游戏(C++)
此文章关于洛谷P1000 超级玛丽游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1000题目的解析: 先看题 ...
- 【bzoj3240 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法--然而我太弱了,一开始只想到了矩阵乘法的 ...
- [洛谷P2584][ZJOI2006]GameZ游戏排名系统
题目大意:同[洛谷P4291][HAOI2008]排名系统(双倍经验) 题解:略 卡点:无 C++ Code: #include <cstdio> #include <map> ...
- 【洛谷】 P1424 小鱼的航程(改进版)(详细代码)
[洛谷]有一只小鱼,它平日每天游泳 250 公里,周末休息,假设从周 x 开始算起,过了 n天以后,小鱼一共累计游泳了多少公里呢? 1.[题目描述] 2.[代码] 1.[题目描述] 题目背景 原来的题 ...
- 洛谷P1288 取数游戏II[博弈论]
题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...
- P1488 肥猫的游戏(博弈论)
题目链接 思路 通过对四边形.五边形.六边形的模拟我们可以知道,野猫是否能赢只与黑色三角形的位置有关,我们只需要知道黑色三角形的每条边各需要切多少次才能成为裸露的,显然有几个顶点就需切几下,这个操作很 ...
- 洛谷P2252 取石子游戏(威佐夫博弈)
题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- 洛谷——P1640 [SCOI2010]连续攻击游戏
P1640 [SCOI2010]连续攻击游戏 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备 ...
最新文章
- OSPF协议学习笔记(一)
- 第十一周编程总结--助教
- 计算机组成与结构实验箱,HQFC-B1计算机组成和数字电路实验箱
- DeepLearning based on PaddlePaddle系列二
- 1816. 截断句子
- [java基础] --- java开发,service层是不是一定要写接口
- linux中echo的使用方法
- 如何在命令中授权给MySQL_MySQL如何使用授权命令grant
- 地摊叫卖、超市播音工具-简洁的文字转语音播音软件
- [JavaWeb基础] 030.dom4j读取xml的4种方法
- 上大学有用吗?35岁以上的程序员都去哪里了
- MyBatis-Plus 学习笔记
- 如何通过细节来看业务流程ERP管理系统的成熟度?
- codeIgniter3 学习笔记四(文件上传)
- screen投屏怎么用_Screen投屏
- [单片机框架][bsp层][AT32F415][bsp_adc] adc配置和使用
- Go语言 defer 和 recover
- 关于HTML系统学习(1)
- 永洪科技怎么样_「永洪科技」北京永洪商智科技有限公司怎么样? - 职友集
- 安卓开发必须会的技能!Android性能优化最佳实践,知乎上转疯了!
热门文章
- 计算机保研er历程分享(浙软、厦大、华师、东南网安、东北、西电、中南......)
- C#DataGridView使用线程定时循环滚动数据
- 迎合老板还是员工 结果导向CRM更受欢迎
- c#之简单人力资源管理系统
- lightoj1138
- 异步编程之 Isolate
- html中闰年的计算方法,什么是闰年(怎么计算)
- ubuntu16.04升级18.04时问题, (appstreamcli:5132): GLib-CRITICAL **: g_strchomp: assertion 'string != NULL'
- OPENSSL的安装使用
- 完全指南:在 Linux 中如何打印和管理打印机