川のブログ

川の適当気ままなブログです。 

AOJ 0151 Grid

こんにちは川です。

今回は普通に解いていけるみたいだったので普通に解いたのですが・・・

コード長が長くなりすぎですね。

 

ソースコード

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
 char ma[255][255];
 int n;
 while(cin>>n,n){
  int pillar[255]={},ans=0;
  for(int i=0;i<n;i++){
   int lo=0;
   for(int j=0;j<n;j++){
    cin>>ma[i][j];
    if(ma[i][j]=='1'){
     pillar[j]++;
     lo++;
    }
    else{
     ans=max(pillar[j],ans);
     ans=max(ans,lo);
     lo=0;
     pillar[j]=0;
    }
   }
   ans=max(ans,lo);
  }
  for(int i=0;i<n;i++){
   int kawa[4]={};
   ans=max(ans,pillar[i]);
    for(int j=0;j<=i;j++){
     if(ma[j][i-j]=='1')kawa[0]++;
     else{
      ans=max(ans,kawa[0]);
      kawa[0]=0;
     }
     if(ma[n-1-i+j][n-1-j]=='1')kawa[1]++;
     else{
      ans=max(ans,kawa[1]);
      kawa[1]=0;
     }
     if(ma[j][n-1-i+j]=='1')kawa[2]++;
     else{
      ans=max(ans,kawa[2]);
      kawa[2]=0;
     }
     if(ma[n-1-i+j][j]=='1')kawa[3]++;
     else {
      ans=max(ans,kawa[3]);
      kawa[3]=0;
     }
    }
    ans=max(ans,kawa[0]);
    ans=max(ans,kawa[1]);
    ans=max(ans,kawa[2]);
    ans=max(ans,kawa[3]);
   }
   cout<<ans<<endl;
  }
}