求dalao纠错

P3397 地毯

thrX @ 2023-01-10 17:02:09

为森莫全WA了呢?

CODE:

#include<iostream>
using namespace std;
const int maxn=1001;
int f[maxn][maxn],really[maxn][maxn];
int sum=0;
int main(){

    int n,m;
    cin>>n>>m;
    for(int i=0;i<m;i++){
        int x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        for(int j=x1;j<=x2;j++){
            f[j][y1]=1;
            f[j][y2]=-1;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            sum+=f[i][j];
            really[i][j]=sum;
            cout<<really[i][j]<<' ';
        }
        cout<<'\n';
    }

    return 0;
} 

求大佬改错(无比诚恳


by thrX @ 2023-01-10 17:05:20

补一句:

样例也没过


by Adelaide_Black @ 2023-01-10 17:16:48

@juruo_xyu

#include<iostream>
using namespace std;
const int maxn=1001;
int f[maxn][maxn];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=0;i<m;i++){
        int x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        for(int j=x1;j<=x2;j++){
            f[j][y1]++; 
            f[j][y2+1]--;
            //这里注意要自加自减,不能直接赋值,因为有重叠的情况。 
        }
    }
    //计算前缀和即可。 
    for(int i=1;i<=n;i++){
        for(int j=2;j<=n;j++){
            f[i][j]+=f[i][j-1];
        }
    } 
    //输出答案。 
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++) cout<<f[i][j]<<" ";
        cout<<endl;
    }
    return 0;
} 

by Adelaide_Black @ 2023-01-10 17:21:39

@juruo_xyu 哦,对了,还有一点。 13

f[j][y2]--;

要改为

f[j][y2+1]--;

这样计算前缀和时才不会忽略最后一个。


by thrX @ 2023-01-11 16:38:07

@qtww_Yan

谢谢大佬!谢谢谢谢谢谢谢谢谢谢谢(谢谢*114514)


|