洛穀P2361 yyy棋_類比

來源:互聯網
上載者:User
題目描述

uim最近在研究一種遊戲,叫做“yyy棋”。
這種遊戲的規則很簡單,就是有一個A*B的棋盤和黑白兩色的棋子,兩個人輪流在下在格子裡面。你可以下黑棋或者白棋,中途可以更換顏色,可以下在任何你喜歡的地方,但是要符合以下條件:
1、這個位置不能已經被別的棋子佔用。
2、你準備下的地方,上下左右一格範圍中不能有和你準備下的顏色一樣的棋子。
3、第一個下的人必須出黑子。
當誰沒有地方可以放子,誰就輸了。
uim把你拉了出來,希望你好好地陪他玩。
由於你很忙不太情願,uim就讓步了,允許你選擇先手或者後手。
你突然靈光一現,想到了你小學奧數做到的一個問題:兩個人坐在一張桌子的兩邊,輪流往桌子上放硬幣,硬幣不能重疊,誰放不下誰就輸了。感覺有點類似,所以,你打算借鑒這個辦法。
你知道,通過某種策略,你一定是100%贏的。
既然如此,就讓uim輸個痛快吧。
輸入輸出格式
輸入格式:
第一行,A,B,兩個整數,表示棋盤大小
接下來若干行,為uim依次下的順序,x_i,y_i,c_i,分別表示位置和顏色,顏色1為黑,0為白。位置均1<=x_i<=A 1<=y_i<=B。
入過uim發現沒地方可走,就可能會耍賴,將棋子下在了不合法的地方。遇到這種情況,你也要指出。當然uim也有可能知道自己輸了後就不下了。不存在遊戲勝負還沒定uim就投降的情況。
輸出格式:
第一行,選擇先手還是後手,先手請輸出“First”,後手輸出“Second”。
接下來幾行,如果你是第一個下子的,請輸出你的第一步下法。然後對uim的下的每一個子做出回應。輸出x_i y_i c_i,意思和上面相同。你必須輸出必勝的下法,否則你將WA這個點。如過多個下法都是必勝點,請輸出個能夠儘早結束遊戲的下法。
在你下完這個子之前,請假裝你不知道uim的下一步走法。
如果uim耍賴,那麼這一行輸出“Buwanle”並結束程式,多餘的輸入就不管它了。
輸入輸出範例
輸入範例#1:
2 2
1 2 1
1 1 1
輸出範例#1:
Second
2 1 0
Buwanle
說明
40%資料,2<=A,B<=3
100%資料,2<=A,B<=9 分析

這個 題沒什麼好說的,只要明確一個規則就好了。那就是中心對稱的原則。
如果(a*b)是奇數,那麼一定有一個中心對稱的點,那麼就要選擇先手,佔據這個中心點,否則選擇後手。然後對手放在哪裡,那麼我一定可以找到另一個對稱的點放棋子。所以才要佔據中心那個點。

對於顏色呢。 如果(a*b)是奇數,那麼就每次選擇和對手下同樣顏色的棋子; 如果是偶數,那麼每次就選擇和對手下不同顏色的棋子。

自己用(2*3)、( 3 * 3)的棋盤類比一下就知道為啥了、 代碼

好像有點亂的代碼。不過還是A了~~~

var num,x,y,z,i,a,b,j:longint;    pan:array[1..9,1..9]of integer;function check(x,y,z:longint):boolean;var flag,i,j:integer;begin  if (x-1>0)and(pan[x-1,y]=z) then exit(true);  if (y+1<=b)and(pan[x,y+1]=z) then exit(true);  if (x+1<=a)and(pan[x+1,y]=z) then exit(true);  if (y-1>0)and(pan[x,y-1]=z) then exit(true);  exit(false);end;begin  readln(a,b);  for i:=1 to a do   for j:=1 to b do pan[i,j]:=-1;  if odd(a*b) then    begin      writeln('First');      writeln(a div 2+1,' ',b div 2+1,' ',1);      pan[a div 2+1,b div 2+1]:=1;      while not eof do        begin          readln(x,y,z);          pan[x,y]:=z;          if (x=0) then begin writeln('Buwanle');halt;end;          if check(x,y,z) then begin writeln('Buwanle');halt;end                          else                            begin                              writeln(a-x+1,' ',b-y+1,' ',z);                              pan[a-x+1,b-y+1]:=z;                            end;        end;    end    else    begin      num:=0;      writeln('Second');      while not eof do        begin          readln(x,y,z);          if (x=0) then begin writeln('Buwanle');halt;end;          inc(num);          if (z=0)and(num=1) then begin writeln('Buwanle');halt;end;          pan[x,y]:=z;          if check(x,y,z) then begin writeln('Buwanle');halt;end                          else                            begin                              writeln(a-x+1,' ',b-y+1,' ',abs(z-1));                              pan[a-x+1,b-y+1]:=abs(z-1);                            end;        end;    end;end.評測結果:Accepted 得分:  100提交時間:2015-10-18 09:28 耗時:46ms記憶體:3137kb 點擊進入記錄列表。 編譯資訊 Compiling編譯成功 評測結果 Result測試點 #1:通過該測試點。 得分20,耗時0ms,記憶體3137kB。測試點 #2:通過該測試點。 得分20,耗時0ms,記憶體3100kB。測試點 #3:通過該測試點。 得分20,耗時0ms,記憶體3133kB。測試點 #4:通過該測試點。 得分20,耗時31ms,記憶體3137kB。測試點 #5:通過該測試點。 得分20,耗時15ms,記憶體3133kB。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.