//时隔一年,再次做这个题,有一种不一样的感觉。。。
#include <cstdio>
int a[50][50] = {0};
int d[4][2] = {1,0, 1,1, 0,1, -1,1};
bool dfs(int x, int y, int dir, int col, int s) {
int xx = x + d[dir][0], yy = y + d[dir][1];
if (s == 5) return (a[xx][yy] != col);
return a[xx][yy] == col && dfs(xx, yy, dir, col, ++s);
}
void gao() {
for (int i = 10; i < 29; ++i)
for (int j = 10; j < 29; ++j)
if (a[i][j]) {
for (int k = 0; k < 4; ++k) {
if (a[i-d[k][0]][j-d[k][1]] != a[i][j] && dfs(i, j, k, a[i][j], 1))
{
printf("%d\n%d %d\n", a[i][j], i-9, j-9);
return;
}
}//for
}//if
puts("0");
}
int main() {
int T;
scanf(" %d", &T);
while (T--) {
for (int i = 10; i < 29; ++i)
for (int j = 10; j < 29; ++j)
scanf(" %d", &a[i][j]);
gao();
}
return 0;
}
去年我是这么写的...
#include <iostream>
using namespace std;
int fun(int a[][30], int i, int j){
if(a[i][j] == 1 && a[i][j + 1] == 1 && a[i][j + 2] == 1
&& a[i][j + 4] == 1 && a[i][j + 3] == 1
&& a[i][j + 5] != 1 && a[i][j - 1] != 1)
return 1;
else if(a[i][j] == 2 && a[i][j + 1] == 2 && a[i][j + 2] == 2
&& a[i][j + 4] == 2 && a[i][j + 3] == 2
&& a[i][j + 5] != 2 && a[i][j - 1] != 2)
return 2;
else if(i >= 4 && a[i][j] == 1 && a[i - 1][j + 1] == 1
&& a[i - 2][j + 2] == 1 && a[i - 4][j + 4] == 1
&& a[i - 3][j + 3] == 1 && a[i - 5][j + 5] != 1
&& a[i + 1][j - 1] != 1)
return 1;
else if(i >= 4 && a[i][j] == 2 && a[i - 1][j + 1] == 2
&& a[i - 2][j + 2] == 2 && a[i - 4][j + 4] == 2
&& a[i - 3][j + 3] == 2 && a[i - 5][j + 5] != 2
&& a[i + 1][j - 1] != 2)
return 2;
else if(a[i][j] == 2 && a[i + 1][j] == 2 && a[i + 2][j] == 2
&& a[i + 4][j] == 2 && a[i + 3][j] == 2
&& a[i + 5][j] != 2 && a[i - 1][j] != 2)
return 2;
else if(a[i][j] == 1 && a[i + 1][j] == 1 && a[i + 2][j] == 1
&& a[i + 4][j] == 1 && a[i + 3][j] == 1
&& a[i + 5][j] != 1 && a[i - 1][j] != 1)
return 1;
else if(a[i][j] == 1 && a[i + 1][j + 1] == 1 && a[i + 2][j + 2] == 1
&& a[i + 3][j + 3] == 1 && a[i + 4][j + 4] == 1
&& a[i + 5][j + 5] != 1 && a[i - 1][j - 1] != 1)
return 1;
else if(a[i][j] == 2 && a[i + 1][j + 1] == 2 && a[i + 2][j + 2] == 2
&& a[i + 3][j + 3] == 2 && a[i + 4][j + 4] == 2
&& a[i + 5][j + 5] != 2 && a[i - 1][j - 1] != 2)
return 2;
return 0;
}
int main(){
int n;
cin >> n;
while(n--){
int a[30][30] = {0};
for(int i = 1; i < 20; i++){
for(int j = 1; j < 20; j++)
cin >> a[i][j];
}
bool flag = true;
for(int i = 1; i < 20; i++){
for(int j = 1; j < 20; j++){
if(fun(a, i, j) == 1){
cout << "1" << endl;
cout << i << " " << j << endl;
flag = false;
break;
}else if(fun(a, i, j) == 2){
cout << "2" << endl;
cout << i << " " << j << endl;
flag = false;
break;
}
}
if(!flag) break;
}
if(!flag) continue;
cout << "0" << endl;
}
return 0;
}