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