1#include<iostream> 2using namespace std; 3char a[20][20]; 4char b1[20][20]; 5char b2[20][20]; 6bool check1(char p[20][20]); 7bool check2(char p[20][20]); 8int n; 9void check(); 10int r,c; 11int endr,endc; 12char ch,endch; 13int main() 14{ 15 int i,j; 16 int cas; 17 cin>>cas; 18 while(cas--) 19 { 20 for(i=1;i<=19;i++) 21 for(j=1;j<=19;j++) 22 cin>>a[i][j]; 23 check(); 24 } 25 return 0; 26} 27 28void check() 29{ 30 int i,j,k; 31 char temp; 32 for(i=1;i<=19;i++) 33 { 34 for(j=i;j<=19;j++) 35 { 36 b1[i][j]=a[j][i]; 37 b1[j][i]=a[i][j]; 38 } 39 } 40 41 if(check1(a))/**//////////////////////////////横行 42 { 43 cout<<ch<<endl; 44 cout<<r<<' '<<c<<endl; 45 return; 46 } 47 if(check1(b1))/**///////////////////////////////////纵行(转置后的a相当于b) 48 { 49 cout<<ch<<endl; 50 cout<<c<<' '<<r<<endl; 51 return; 52 } 53 54 55 if(check2(a))/**//////////////////////////////////下三角a 56 { 57 cout<<ch<<endl; 58 cout<<r<<' '<<c<<endl; 59 return; 60 } 61 if(check2(b1))/**////////////////////////////////////上三角a相当于下三角b 62 { 63 cout<<ch<<endl; 64 cout<<c<<' '<<r<<endl; 65 return; 66 } 67 68 for(i=19,j=1;i>=j;i--,j++)/**//////////////////////////////列转置 69 { 70 k=1; 71 while(k<=19) 72 { 73 b2[k][i]=a[k][j]; 74 b2[k][j]=a[k][i]; 75 k++; 76 } 77 } 78 79 if(check2(b2))/**//////////////////////////////////////////从右上到左下,计算下三角 80 { 81 cout<<ch<<endl; 82 cout<<endr<<' '<<20-endc<<endl; 83 return; 84 } 85 86 for(i=1;i<=19;i++) 87 { 88 for(j=i;j<=19;j++) 89 { 90 temp=b2[i][j]; 91 b2[i][j]=b2[j][i]; 92 b2[j][i]=temp; 93 } 94 } 95 if(check2(b2))/**///////////////////////////////////////////计算上三角 96 { 97 cout<<ch<<endl; 98 cout<<endc<<' '<<20-endr<<endl; 99 return; 100 } 101 102 else cout<<'0'<<endl; 103} 104bool check1(char p[20][20]) 105{ 106 int i,j,k; 107 for(i=1;i<=19;i++) 108 { 109 for(j=1;j<=15;j++) 110 { 111 if(p[i][j]=='0') 112 continue; 113 for(k=1;k<=4;k++) 114 { 115 if(p[i][j+k]!=p[i][j]) 116 break; 117 } 118 if(k==5) 119 { 120 if(j+k==20) 121 { 122 r=i; 123 c=j; 124 ch=p[i][j]; 125 return true; 126 } 127 else if(p[i][j+k]==p[i][j]) 128 { 129 while(p[i][j]==p[i][j+k]) 130 { 131 k++; 132 if(j+k==20) 133 break; 134 } 135 j=j+k-1; 136 } 137 else 138 { 139 ch=p[i][j]; 140 r=i; 141 c=j; 142 return true; 143 } 144 } 145 else 146 { 147 j=j+k-1; 148 } 149 } 150 } 151 return false; 152} 153 154bool check2(char p[20][20]) 155{ 156 int i,j,k,m; 157 for(i=1;i<=15;i++) 158 { 159 j=1; 160 m=i; 161 while(j<20&&m<20) 162 { 163 if(p[m][j]=='0') 164 { 165 j++; 166 m++; 167 continue; 168 } 169 170 for(k=1;k<=4;k++) 171 { 172 if(p[m][j]!=p[m+k][j+k]) 173 break; 174 } 175 if(k==5) 176 { 177 if(j+k==20) 178 { 179 ch=p[m][j]; 180 endch=p[m+k-1][j+k-1]; 181 r=m; 182 c=j; 183 endr=m+k-1; 184 endc=j+k-1; 185 return true; 186 } 187 else if(p[m+k][j+k]==p[m][j]) 188 { 189 m=m+k; 190 j=j+k; 191 while(p[m][j]==p[m-1][j-1]) 192 { 193 m++; 194 j++; 195 if(m>=20) 196 break; 197 } 198 } 199 else 200 { 201 ch=p[m][j]; 202 endch=p[m+k-1][j+k-1]; 203 r=m; 204 c=j; 205 endr=m+k-1; 206 endc=j+k-1; 207 return true; 208 } 209 } 210 else 211 { 212 j=j+k; 213 m=m+k; 214 } 215 } 216 } 217 return false; 218}
|