【BZOJ2927】[Poi1999]多边形之战

Description

多边形之战是一个双人游戏。游戏在一个有n个顶点的凸多边形上进行,这个凸多边形的n-3条对角线将多边形分成n-2个三角形,这n-3条对角线在多边形的顶点相交。三角形中的一个被染成黑色,其余是白色。双方轮流进行游戏,当轮到一方时,他必须沿着画好的对角线,从多边形上切下一个三角形。切下黑色三角形的一方获胜。
注:如果连接一个多边形中任意两点的线段都完全包含于这个多边形,则称这个多边形为凸多边形。
求解任务:
请设计一个程序:
       ·读入对一个多边形的描述。
·确定先走的一方是否能够获胜。
·将结果输出。

Input

第一行是一个整数, 4 <= n <= 50000。表示多边形的顶点数,多边形的顶点从0到n-1顺时针标号。接着的n-2行描述组成多边形的三角形。第i+1行, 1 <= i <= n-2,有三个空格分隔的非负整数a、 b、 c,它们是第i个三角形的顶点编号。第一个给出的三角形是黑色的。

Output

唯一一行应包含一个单词:
TAK(波兰文“是”),表示先走的一方有必胜策略,或者
NIE(波兰文“否”),表示先走的一方没有必胜策略。

Sample Input

6
0 1 2
2 4 3
4 2 0
0 5 4

Sample Output

TAK

题解:代码300B的神题

我们分3种情况讨论

1.如果黑色三角形有两条边在凸多边形上,那么直接切了就好了,输出TAK
2.如果黑色三角形有一条边在凸多边形上,那么最终情况一定是一个黑色三角形和一个白色三角形,此时直接取黑色就好了,必胜;然后我们将切掉的白色三角形一个一个加回去。加一个,变成必败了,再加一个,又必胜...所以n为偶则胜,n为奇则败
3.如果黑色三角形没有边在凸多边形上,那么最终情况还是一个黑色三角形连着一个白色三角形,还是n为偶则胜,n为奇则败

所以只需要读入一条边就行

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int n,a,b,c,A,B,C;
scanf("%d%d%d%d",&n,&a,&b,&c);
if(a<b) swap(a,b);
if(a<c) swap(a,c);
if(b<c) swap(b,c);
if((a==b+1&&b==c+1)||(a==n-1&&b==1&&c==0)||(a==n-1&&b==n-2&&c==0)) printf("TAK");
else
{
if(n&1) printf("NIE");
else printf("TAK");
}
return 0;
}

最新文章

  1. Orcal函数
  2. [网络技术][转]PPTP协议解析
  3. JQuery上传插件uploadify整理(Events)
  4. pure.css
  5. ios ableviewcell的动态加载数据,模仿喜马拉雅动态数据加载
  6. MFC UpdateData自动更新
  7. 诡异的SpriteKit 游戏查错
  8. Contains Duplicate II 解答
  9. HTML+CSS笔记 CSS笔记集合
  10. 查询sql 语句的好坏
  11. python 接口自动化测试--代码实现(七)
  12. Realm数据持久化方案的简单介绍和使用(二)
  13. 爬虫之urllib
  14. java传输文件的简单方法
  15. pxe+kickstart 自动化部署linux操作系统
  16. 使用Maven进行多模块拆分
  17. HDu 2544 最短路【dijkstra &amp;amp; floyed &amp;amp; SPFA 】
  18. Java基础 【Arrays 类的使用】
  19. tarjan 缩点(模板)
  20. idea中使用thymeleaf标签时有红色的波浪线怎么去掉

热门文章

  1. struts过滤器的原理
  2. 前端资源管理工具sourcetree
  3. 以登录实例简单介绍Servlet使用
  4. php-fig组织fig-standards的一些标准
  5. signed distance field 算法
  6. excel weekday
  7. C#Lpt端口打印类的操作浅析
  8. myeclipse修改jsp文件的名称之后,再也打不开的解决方案
  9. c# 遇到的问题,求解?
  10. Retrofit--官网2.1.0