加个while为啥就超时了?

P1736 创意吃鱼法

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)


|