読者です 読者をやめる 読者になる 読者になる

川のブログ

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

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;
  }
}