51NOD 1995 三子棋 【思維打表+圖解】
阿新 • • 發佈:2018-12-30
題目來源: syu校賽
基準時間限制:1 秒 空間限制:131072 KB
小的時候大家一定玩過“井”字棋吧。也就是在九宮格中,只要任意行、列,或者任意連續對角線上面出現三個相同的,就能獲勝。現在小明和小花也在玩三子棋,但是他們不是在九宮格里,而是在3×4的格子裡面。現在小明先下,但是他知道小花這個人很聰明,他想知道第一步下在哪一個地方最合適,你能幫幫他嗎?
Input
第一行輸入一個整數T,表示資料組數
第二行輸入兩個整數x,y,表示3×4格子裡面的一個座標(x,y)
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