【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.如果黑色三角形有两条边在凸多边形上,那么直接切了就好了,输出TAK2.如果黑色三角形有一条边在凸多边形上,那么最终情况一定是一个黑色三角形和一个白色三角形,此时直接取黑色就好了,必胜;然后我们将切掉的白色三角形一个一个加回去。加一个,变成必败了,再加一个,又必胜...所以n为偶则胜,n为奇则败3.如果黑色三角形没有边在凸多边形上,那么最终情况还是一个黑色三角形连着一个白色三角形,还是n为偶则胜,n为奇则败
所以只需要读入一条边就行
#include#include using namespace std;int main(){ int n,a,b,c,A,B,C; scanf("%d%d%d%d",&n,&a,&b,&c); if(a