close
C++
#include <iostream> #include <string> using namespace std; int i,t,m,n,q,row,col,j; int main() { cin>>t; while(t--)//輸入測資數量 { cin>>m>>n>>q;//輸入測資 cout<<m<<" "<<n<<" "<<q<<endl;//照格式輸出 if(m<n)//取得較小的數 { n=m; } int flag[n+1];//判斷最大的正方形是多少 string is1[m+2]={""};//怕出錯所以多宣告兩個 //基本上會在輸入的矩陣外圈多加一圈空白 getline(cin,is1[0]);//cin之後getline會出錯所以要多打一次 for(i=1;i<m+1;i++)//輸入矩陣 { getline(cin,is1[i]); is1[i]=" "+is1[i]+" ";//左右多加空白 } for(i=0;i<is1[1].length();i++)//上下多加空白 { is1[0]+=" "; is1[m+1]+=" "; } while(q--) { for(i=0;i<=n;i++)//重製 { flag[i]=1; } cin>>row>>col;//輸入中心點 row+=1;//因為矩陣外圈多加空白所以加1 col+=1; for(i=1;flag[i-1]==1;i++)//從中心一圈一圈判斷 { //i代表第幾圈 for(j=-i;j<=i;j++) { if(is1[row][col]!=is1[row-i][col+j])//比較上排的字 { flag[i]=0; break; } if(is1[row][col]!=is1[row+j][col+i])//右邊 { flag[i]=0; break; } if(is1[row][col]!=is1[row+i][col+j])//下面 { flag[i]=0; break; } if(is1[row][col]!=is1[row-j][col-i])//左邊 { flag[i]=0; break; } } } for(i=1;i<=n;i++)//輸出 { if(flag[i]==0) { cout<<1+(i-1)*2<<endl; break; } } } } return 0; }
文章標籤
全站熱搜