Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 6886 | Accepted: 1763 |
Description
Horizontal lines are marked 1, 2, ..., 19 from up to down and vertical lines are marked 1, 2, ..., 19 from left to right.
The objective of this game is to put five stones of the same color consecutively along a horizontal, vertical, or diagonal line. So, black wins in the above figure. But, a player does not win the game if more than five stones of the same color were put consecutively.
Given a configuration of the game, write a program to determine whether white has won or black has won or nobody has won yet. There will be no input data where the black and the white both win at the same time. Also there will be no input data where the white or the black wins in more than one place.
Input
Output
Sample Input
1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 2 0 0 2 2 2 1 0 0 0 0 0 0 0 0 0 0
0 0 1 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 2 2 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Sample Output
1
3 2
Source
思路:搜索。
#include<iostream> using namespace std; const int dir_x[]={1,0,1,-1}; const int dir_y[]={0,1,1,1}; void search(int x,int y); int judge,goal_x,goal_y,board[21][21]; void search(int x,int y){ for(int i=0;i<4;i++){ int tmpx=x,tmpy=y,counter=0; int tx=tmpx-dir_x[i],ty=tmpy-dir_y[i]; if(tx>=0&&tx<19&&ty>=0&&ty<19&&board[tx][ty]==board[x][y]) continue; while(tmpx>=0&&tmpx<19&&tmpy>=0&&tmpy<19&&board[tmpx][tmpy]==board[x][y]){ counter++; tmpx+=dir_x[i]; tmpy+=dir_y[i]; } if(counter==5){ judge=board[x][y]; goal_x=x+1; goal_y=y+1; return; } } return; } int main(){ int t;cin>>t; while(t--){ for(int i=0;i<19;i++) for(int j=0;j<19;j++) cin>>board[i][j]; judge=0; for(int i=0;i<19;i++){ if(judge!=0) break; for(int j=0;j<19;j++){ if(judge!=0) break; if(board[i][j]==0) continue; search(i,j); } } cout<<judge<<endl; if(judge==1)cout<<goal_x<<" "<<goal_y<<endl; else if(judge==2) cout<<goal_x<<" "<<goal_y<<endl; } }