莫名错误
查看原帖
莫名错误
246979
SalomeJLQ楼主2020/9/30 19:48

第一份64分,部分MLE,第八个点WA

#include<bits/stdc++.h>
using namespace std;
int a[5005][5005],s[5005][5005],n,m,x,y,v,ans;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){cin>>x>>y>>v;a[x][y]=v;}
    for(int i=1;i<5005;i++)
        s[0][i]=s[0][i-1]+a[0][i],s[i][0]=s[i-1][0]+a[i][0];
    for(int i=1;i<5005;i++)
        for(int j=1;j<5005;j++)
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
    for(int i=m;i<5005;i++)
        for(int j=m;j<5005;j++)
            ans=max(ans,s[i][j]-s[i-m][j]-s[i][j-m]+s[i-m][j-m]);
    cout<<ans;
    return 0;
}

第二份55分,改成short,然后强制类型转换(否则编译错误)。

WA了好几个点。

#include<bits/stdc++.h>
using namespace std;
short a[5005][5005],s[5005][5005],n,m,x,y,v,ans;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){cin>>x>>y>>v;a[x][y]=v;}
    for(int i=1;i<5005;i++)
        s[0][i]=s[0][i-1]+a[0][i],s[i][0]=s[i-1][0]+a[i][0];
    for(int i=1;i<5005;i++)
        for(int j=1;j<5005;j++)
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
    for(int i=m;i<5005;i++)
        for(int j=m;j<5005;j++)
            ans=max(int(ans),int(s[i][j]-s[i-m][j]-s[i][j-m]+s[i-m][j-m]));
    cout<<ans;
    return 0;
}

然后手写max函数,第八个点WA,其他AC

#include<bits/stdc++.h>
using namespace std;
short a[5005][5005],s[5005][5005],n,m;int x,y,v,ans;
short maxn(short a,short b){return a>b?a:b;}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){cin>>x>>y>>v;a[x][y]=v;}
    for(int i=1;i<5005;i++)
        s[0][i]=s[0][i-1]+a[0][i],s[i][0]=s[i-1][0]+a[i][0];
    for(int i=1;i<5005;i++)
        for(int j=1;j<5005;j++)
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
    for(int i=m;i<5005;i++)
        for(int j=m;j<5005;j++)
            ans=maxn(ans,s[i][j]-s[i-m][j]-s[i][j-m]+s[i-m][j-m]);
    cout<<ans;
    return 0;
}

然后maxn函数返回值强制类型转换,并且修改返回值类型。

评测结果同上。

#include<bits/stdc++.h>
using namespace std;
short a[5005][5005],s[5005][5005],n,m;int x,y,v,ans;
int maxn(short a,short b){return int(a>b?a:b);}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){cin>>x>>y>>v;a[x][y]=v;}
    for(int i=1;i<5005;i++)
        s[0][i]=s[0][i-1]+a[0][i],s[i][0]=s[i-1][0]+a[i][0];
    for(int i=1;i<5005;i++)
        for(int j=1;j<5005;j++)
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
    for(int i=m;i<5005;i++)
        for(int j=m;j<5005;j++)
            ans=maxn(ans,s[i][j]-s[i-m][j]-s[i][j-m]+s[i-m][j-m]);
    cout<<ans;
    return 0;
}

然后看到了ans不会超过short,所以直接全改short。

评测结果同上。

#include<bits/stdc++.h>
using namespace std;
short a[5005][5005],s[5005][5005],n,m,x,y,v,ans;
short maxn(short a,short b){return a>b?a:b;}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){cin>>x>>y>>v;a[x][y]=v;}
    for(int i=1;i<5005;i++)
        s[0][i]=s[0][i-1]+a[0][i],s[i][0]=s[i-1][0]+a[i][0];
    for(int i=1;i<5005;i++)
        for(int j=1;j<5005;j++)
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
    for(int i=m;i<5005;i++)
        for(int j=m;j<5005;j++)
            ans=maxn(ans,s[i][j]-s[i-m][j]-s[i][j-m]+s[i-m][j-m]);
    cout<<ans;
    return 0;
}

所以第八个点一直是WA的,怎么解决?

肯定是评测机出问题了,这题就算过了吧

2020/9/30 19:48
加载中...