洛谷P2692 覆盖 题解

题目传送门

这道题一开始想使用二维的bool型数组来存,最后统计。但看到数据范围。。。

所以就改用两个bool型数组(一维),分别储存横、列,最后将横、列面积求出来,再减去重复算的面积(横的个数*列的个数)

最重要的是这题的n、m坑了我两次。。。

#include<bits/stdc++.h>
using namespace std;
int n,m,b,g,B[5010],G[5010],Ax,Ag,ans;
int main(){
    scanf("%d%d%d%d",&n,&m,&b,&g);
    for(int i=1;i<=b;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        for(int j=x;j<=y;j++) B[j]=1;
    }
    for(int i=1;i<=g;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        for(int j=x;j<=y;j++) G[j]=1;
    }
    for(int i=1;i<=n;i++) Ax+=B[i];
    for(int i=1;i<=m;i++) Ag+=G[i];
    ans=Ax*m+Ag*n-Ax*Ag;
    printf("%d\n",ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/yzx1798106406/p/9038131.html