1. 程式人生 > >51NOD 1995 三子棋 【思維打表+圖解】

51NOD 1995 三子棋 【思維打表+圖解】

題目來源: syu校賽
基準時間限制:1 秒 空間限制:131072 KB

小的時候大家一定玩過“井”字棋吧。也就是在九宮格中,只要任意行、列,或者任意連續對角線上面出現三個相同的,就能獲勝。現在小明和小花也在玩三子棋,但是他們不是在九宮格里,而是在3×4的格子裡面。現在小明先下,但是他知道小花這個人很聰明,他想知道第一步下在哪一個地方最合適,你能幫幫他嗎?

Input

第一行輸入一個整數T,表示資料組數1<T<10000
第二行輸入兩個整數x,y,表示3×4格子裡面的一個座標(x,y)1<=x<=3,1<=y<=4

Output

每組資料輸出最後小明輸贏的結果,如果小明一定能贏,第一行輸出“Win”,第二行輸出小明所需要花的最少步數;如果小明跟小花只能打成平手,第一行輸出“Equal”,第二行輸出數字0;如果小明不能贏也不能跟小花打成平手,第一行輸出“Lose”,第二行輸出小花贏小明所需要花的最少步數。

Input示例

2
2 1
2 4

Output示例

Equal
0
Equal
0

題意: 略

分析: 玩過五子棋的應該都熟悉套路,因為表只有3*4的,又對稱,只需要考慮四個點即可
如下圖四個點
這裡寫圖片描述
2,3,4,兩點這裡不予證明,2,4就是隨便下贏的步數都為4步,而3點怎麼下都是平局。只說下1點,1點如下圖,能贏的最短步數過程這裡寫圖片描述

參考程式碼

#include<bits/stdc++.h>

using namespace std;

int a[5][5];

void init() {
    a[1][1] = 6;a[1][2] = 4;a[1][3
] = 4;a[1][4] = 6; a[2][1] = 0;a[2][2] = 4;a[2][3] = 4;a[2][4] = 0; a[3][1] = 6;a[3][2] = 4;a[3][3] = 4;a[3][4] = 6; } int main(){ init(); int T;cin>>T; while (T--) { int aa,b;cin>>aa>>b; if(a[aa][b] == 0) { cout<<"Equal"<<endl; cout
<<a[aa][b]<<endl; } else { cout<<"Win"<<endl; cout<<a[aa][b]<<endl; } } }
  • 如有錯誤或遺漏,請私聊下UP,thx