洛谷P 1488肥えた猫のゲーム


タイトルリンク
テーマは野良猫とデブを説明して、合わせて太った猫と略称して、1つのクラスの同級生で、彼らもすべて数学の達人で、だからいつもいっしょに数学の問題を討論しても不思議ではありません.
ある時、野良猫は面白い幾何学ゲームのテーマに出会って、デブに見せた.ゲームは、n個の頂点を持つ凸多角形上で行われ、この凸多角形のn−3本の対角線は多角形の頂点で交差するn−2個の三角形に多角形を分割する.三角形の1つは黒く染められ、残りは白です.
双方が交代でゲームを行い、一方の番になると、描いた対角線に沿って多角形から三角形を切らなければならない.黒い三角形を切った方が勝つ.デブは確かに面白いと思うから、一緒に遊びましょう.仮にゲームが野良猫から始まるとしたら、野良猫には必勝の戦略があるのだろうか.野良猫の計算を助けるプログラムを書いてください.
フォーマットの第1の動作の整数nを入力し、ポリゴンの頂点数を表し、ポリゴンの頂点は0〜n−1の時計回りの符号である.
次のn−2行は多角形を構成する三角形を記述する.i+1行目(1≦i≦n−2)は、i番目の三角形の頂点番号である3つのスペースで区切られた非負の整数a、b、cを有する.最初に与えられた三角形は黒いです.
出力フォーマットは1行のみで、野良猫が必勝戦略があれば、JMcat Winを出力します.そうでなければ、PZ Win(大文字と小文字とスペースに注意)を出力します.
入出力サンプル入力#16 0 1 2 2 4 4 4 2 0 5 4出力#1 JMcat Win説明/ヒント4≦n≦5×104 .
1つのポリゴンに接続された任意の2点のセグメントがこのポリゴンに完全に含まれている場合、このポリゴンを凸ポリゴンと呼びます.
コード:
//P1488      
#include
using namespace std;
int n, x, y, z, xx, yy, zz;
int jud0()
{
     
	int ans =0 ;
	if(abs(xx - yy) == 1) ans++;
	if(abs(xx - zz) == 1) ans++;
	if(abs(yy - zz) == 1) ans++;
	if(xx == 0)
	{
     
		if(yy == n - 1 || zz == n - 1) ans++;
	}
	if(yy == 0)
	{
     
		if(xx == n - 1 || zz == n - 1) ans++;
	}
	if(zz == 0)
	{
     
		if(xx == n - 1 || yy == n - 1) ans++;
	}
	return ans;
}

int main()
{
     
	cin >> n;
	for(int i = 0; i < n - 2; i++)
	{
     
		scanf("%d%d%d", &x, &y, &z);
		if(!i)
		{
     
			xx = x;
			yy = y;
			zz = z;
		}
	}
	if(jud0()==2)
	{
     
		cout << "JMcat Win" << endl;
		return 0;
	}
	if(n % 2 == 1) cout << "PZ Win" << endl;
	else cout << "JMcat Win" << endl;
}