題目鏈接
題目描述
野貓與胖子,合起來簡稱肥貓,是一個班的同學,他們也都是數學高手,所以經常在一起討論數學問題也就不足為奇了,
一次,野貓遇到了一道有趣的幾何游戲題目,便拿給胖子看,游戲要求在一個有 n 個頂點凸多邊形上進行,這個凸多邊形的 n?3 條對角線將多邊形分成 n?2 個三角形,這 n?3 條對角線在多邊形的頂點相交,三角形中的一個被染成黑色,其余是白色,
雙方輪流進行游戲,當輪到一方時,他必須沿著畫好的對角線,從多邊形上切下一個三角形,切下黑色三角形的一方獲勝,胖子一看覺得確實很有趣,不如就一起玩玩吧,假設游戲由野貓先開始,那么野貓是否有必勝的策略呢?請寫一個程式幫助野貓算一算,
輸入格式
第一行為一個整數 n,表示多邊形的頂點數,多邊形的頂點由 0 至 n?1 順時針標號,
接著的 n?2 行描述組成多邊形的三角形,第 i+1 行 (1≤i≤n?2) 有三個空格分隔的非負整數 a 、b 、c ,它們是第 i 個三角形的頂點編號,第一個給出的三角形是黑色的,
輸出格式
只有一行,倘若野貓有必勝策略,輸出 JMcat Win;否則,輸出 PZ Win(注意大小寫和空格),
輸入輸出樣例
輸入 #1
6
0 1 2
2 4 3
4 2 0
0 5 4
輸出 #1
JMcat Win
說明/提示
4≤n≤5×104 ,
如果連接一個多邊形中任意兩點的線段都完全包含于這個多邊形,則稱這個多邊形為凸多邊形,
代碼:
//P1488 肥貓的游戲
#include<bits/stdc++.h>
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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262113.html
標籤:其他
下一篇:這竟然是一篇年度總結
