题目链接:https://www.luogu.org/problem/P1488

其实这道题目我只需要 \(n\) 以及黑色三角形的三个端点编号就可以了。

我们假设在一个 \(n\) 边形中,黑色三角形的端点号分别是 \(a_0, a_1, a_2\) ,且 \(a_0 \lt a_1 \lt a_2\) ,那我其实可以知道:

  • \(a_0 - a_1\) 边外围的三角形个数是 \(b_0 = a_1 - a_0 - 1\) ;
  • \(a_1 - a_2\) 边外围的三角形个数是 \(b_1 = a_2 - a_1 - 1\) ;
  • \(a_2 - a_0\) 边外围的三角形个数是 \(b_2 = a_0 + n - a_2 - 1\) 。

然后我们来思考一下:

如果一开始黑色三角形就有两条边裸露在外面(即存在两个 \(b_i = 0\)),则直接判定先手赢;

否则,因为大家都是绝对聪明的,所以除非万不得已,绝对不会让黑色三角形的边裸露出来,那么总共会取 \(b_0+b_1+b_2-1\) 轮,此时的状态是黑色三角形有两边裸露,另一边紧贴着仅剩下的一个白色三角形,而下一步执行的人获胜。

那么这个时候只需要判断 \(b_0+b_1+b_2\) 是偶数,则先手赢;是奇数,则后手赢。

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
int n, a[3], b[3];
bool win;
int main() {
cin >> n; for (int i = 0; i < 3; i ++) cin >> a[i];
sort(a, a+3);
b[0] = a[1] - a[0] - 1;
b[1] = a[2] - a[1] - 1;
b[2] = a[0] + n - a[2] - 1;
sort(b, b+3);
if (b[1] == 0) win = true;
else win = ( (b[0] + b[1] + b[2] - 1) % 2 == 0 );
puts( win ? "JMcat Win" : "PZ Win" );
return 0;
}

最新文章

  1. UI: 窗口全屏, 窗口尺寸
  2. BZOJ1798: [Ahoi2009]Seq 维护序列seq
  3. fixed的left:50%,漂浮
  4. 黄聪:MYSQL使服务器内存CPU占用过高问题的分析及解决方法
  5. service mongod start start: Unknown job: mongod问题
  6. golang bufio writer,reader 缓存规则
  7. RFID系统的选择
  8. linux_环境变量设置 utf-8
  9. 大数据:Hadoop入门
  10. SQL游标使用及实例
  11. RHEL 6.9 udev 将lv绑定raw devices
  12. Dubbo的@Reference和@Service说明
  13. C. Maximal Intersection(STL)
  14. phpstudy 产生You don&#39;t have permission to access / on this server.解决
  15. ORA-01034: ORACLE not available ORA-27101
  16. Scrapy学习篇(一)之框架
  17. LINUX系统备份还原
  18. set_time_limit
  19. spring 学习之二 AOP编程
  20. linux 三大利器 grep sed awk 正则表达式

热门文章

  1. 使用JSONObject进行序列化时,避开定义get或set为开头的方法名称
  2. Windows系统MySQL8.0的安装教程
  3. DateTimeFormatter
  4. tcpdump抓取udp报文
  5. Python 运算符首尾匹配
  6. 【php】php开发的前期准备
  7. CMake学习笔记一
  8. C++ 浮点数 为 0 的判断
  9. 在Struts2里面嵌入Spring
  10. ios开发使用Basic Auth 认证方式