BZOJ4131


4131: 並行博弈

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 24  Solved: 15
[Submit][Status][Discuss]

Description

lyp和ld在一個n*m的棋盤上玩翻轉棋,遊戲棋盤座標假設爲(x, y),1 ≤ x ≤ n,1 ≤ y ≤ m,這個遊戲的遊戲的的遊戲規則如下:
每次可以操作座標爲 (x, y) 的棋子,要求棋子 (x, y) 必須是黑色,並且同時翻轉所有棋子座標 (x’, y’) 滿足 x’≤x, y’≤y。
lyp覺得這樣還不夠過癮,於是乎他打算同時玩 k 個這樣的遊戲, 每次可以對其中某一個遊戲進行操作,lyp先手,ld後手,兩人輪流進行操作,最後無法進行操作的人判輸,現在給你這個遊戲的局面,要求輸出是先手必勝(“lyp win”)還是後手必勝(“ld win”)。

Input

第一行一個數T,表示數據組數。
接下來T組數據,對於每一組數據:
接下來一行一個數K,表示有多少個遊戲在進行中,
接下來K部分,每部分第一行兩個數n,m表示棋盤大小,
接下來n行,每行m個數,0 表示這個棋子是白色,1表示爲黑色,第一行第一列代表棋子座標(1,1)。

Output

對於每一組數據,換行輸出先手必勝(“lyp win”)還是後手必勝(“ld win”),輸出不包含引號。

Sample Input

1
1
2 2
1 1
1 0

Sample Output

lyp win

HINT

對於所有的測試數據,n*m*K ≤ 105,T ≤ 20。






考慮第一個格子,如果它是1,那麼先手可以每次都去翻它,則先手必勝;如果它是0,則先手要麼不能翻,要麼把它翻成1,那麼後手可以每次去翻它,則後手必勝

感覺智商被掏空... By yfzcsc


#include<bits/stdc++.h>
using namespace std;
int t,n,a,m,k,flag,x;
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d",&k);
		int f=0;
		while(k--){
			scanf("%d%d",&n,&m);
			scanf("%d",&flag);
			for(int i=2;i<=n*m;i++)scanf("%d",&x);
			f^=flag;
		}
		printf("%s\n",f?"lyp win":"ld win");
		
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章