wxgwxg @ 2017-08-12 10:15:29
没超时的
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int m,n,maxn;
struct ww{
int l,r,a;
}dp[2511][2511];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&dp[i][j].a);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(dp[i][j].a)
{
if(dp[i-1][j-1].l ==0)
dp[i][j].l =1;
else { int q=dp[i-1][j-1].l +1;
for(int k=1;k<=dp[i-1][j-1].l;k++)
{
if(dp[i-k][j].a ||dp[i][j-k].a )
{
q=k;
break;
}}
dp[i][j].l =q;
}
if(dp[i-1][j+1].r ==0)
dp[i][j].r =1;
else
{ int p=dp[i-1][j+1].r+1;
for(int k=1;k<=dp[i-1][j+1].r ;k++)
{
if(dp[i-k][j].a ||dp[i][j+k].a )
{
p=k;
break;
}
} dp[i][j].r =p;
} maxn=max(dp[i][j].l,maxn);
maxn=max(dp[i][j].r ,maxn);}
}
cout<<maxn<<endl;
return 0;
}
超时的
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int m,n,maxn;
struct ww{
int l,r,a;
}dp[2511][2511];
int main(){
while(scanf("%d%d",&n,&m);
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&dp[i][j].a);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(dp[i][j].a)
{
if(dp[i-1][j-1].l ==0)
dp[i][j].l =1;
else { int q=dp[i-1][j-1].l +1;
for(int k=1;k<=dp[i-1][j-1].l;k++)
{
if(dp[i-k][j].a ||dp[i][j-k].a )
{
q=k;
break;
}}
dp[i][j].l =q;
}
if(dp[i-1][j+1].r ==0)
dp[i][j].r =1;
else
{ int p=dp[i-1][j+1].r+1;
for(int k=1;k<=dp[i-1][j+1].r ;k++)
{
if(dp[i-k][j].a ||dp[i][j+k].a )
{
p=k;
break;
}
} dp[i][j].r =p;
} maxn=max(dp[i][j].l,maxn);
maxn=max(dp[i][j].r ,maxn);}
cout<<maxn<<endl;
}
return 0;
}
by miemieQWQ @ 2017-08-15 21:20:18
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int m,n,maxn;
struct ww{
int l,r,a;
}dp[2511][2511];
int main(){
while(scanf("%d%d",&n,&m);//多了一个;
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&dp[i][j].a);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(dp[i][j].a)
{
if(dp[i-1][j-1].l ==0)
dp[i][j].l =1;
else { int q=dp[i-1][j-1].l +1;
for(int k=1;k<=dp[i-1][j-1].l;k++)
{
if(dp[i-k][j].a ||dp[i][j-k].a )
{
q=k;
break;
}}
dp[i][j].l =q;
}
if(dp[i-1][j+1].r ==0)
dp[i][j].r =1;
else
{ int p=dp[i-1][j+1].r+1;
for(int k=1;k<=dp[i-1][j+1].r ;k++)
{
if(dp[i-k][j].a ||dp[i][j+k].a )
{
p=k;
break;
}
} dp[i][j].r =p;
} maxn=max(dp[i][j].l,maxn);
maxn=max(dp[i][j].r ,maxn);}
cout<<maxn<<endl;
}
return 0;
}
by damage @ 2017-09-26 21:05:30
不是废话吗
by M_seа @ 2017-10-23 21:10:47
没有多组数据
by Peter_Z @ 2017-12-15 18:56:33
除了多了一个;
不还有应该写
while(scanf("%d %d",&n,&m)==2) {
}
或者
while(scanf("%d %d",&n,&m)!=EOF) {
}
之类的吗
scanf遇到EOF不会返回0,而会返回EOF(-1)