覆盖
题目背景
WSR 的学校有 BBB 个男生和 GGG 个女生都来到一个巨大的操场上扫地。
题目描述
操场可以看成是 NNN 行 MMM 列的方格矩阵,如下图 (1) 是一个 444 行 555 列的方格矩阵。每个男生负责打扫一些连续的行,每个女生负责打扫一些连续的列。比如有两个男生,第一个男生负责第 1,21, 21,2 两行、第二个男生负责第 444 行,如图 (2) 的蓝色。打扫的区域可能重复,比如,又有两个女生,第一个女生负责打扫第 3,43, 43,4 两列,第二个女生负责打扫第 4,54, 54,5 两列,如图 (3) 的红色。从图 (3) 可以容易看出,有颜色覆盖的方格数为 181818,即这 444 名学生总共打扫了 181818 个方格。

老师要 WSR 在学校给出打扫安排的数据后快速计算出这些学生总共打扫了多少方格。
输入格式
第一行 444 个正整数:N,M,B,GN, M, B, GN,M,B,G。其中 NNN 表示方阵行数,MMM 表示方阵列数,BBB 表示男生数,GGG 表示女生数。
接下来 BBB 行,每行两个整数 x,yx, yx,y。表示相应某个男生负责打扫从第 xxx 行到第 yyy 行(共 y−x+1y - x + 1y−x+1 行),保证 1≤x≤y≤N1 \le x \le y \le N1≤x≤y≤N。
再接下来 GGG 行,每行两个整数 x,yx, yx,y。表示相应某个女生负责打扫从第 xxx 列到第 yyy 列(共 y−x+1y - x + 1y−x+1 列),保证 1≤x≤y≤M1 \le x \le y \le M1≤x≤y≤M。
输出格式
一个整数,表示所打扫的面积。(即格子的总数)
样例 #1
样例输入 #1
4 5 2 2
1 2
4 4
3 4
4 5
样例输出 #1
18
提示
不会可以自己画图。
数据范围与约定
对于 80%80\%80% 的数据,1≤N,M,B,G≤1021 \le N,M,B,G \le 10^21≤N,M,B,G≤102。
对于 100%100\%100% 的数据,$ 1 \le N,M,B,G \le 5 \times 10^3$。
C++实现
#include<bits/stdc++.h>
using namespace std;
int n,m,b,g,ma[5001][5001],x,y,ans;
bool h[5001];
int main(){
scanf(“%d %d %d %d”,&n,&m,&b,&g);
for (int i=1;i<=b;i++){
scanf(“%d %d”,&x,&y);
for (int j=x;j<=y;j++) h[j]=1;
}
for (int i=1;i<=g;i++){
scanf(“%d %d”,&x,&y);
for (int j=1;j<=n;j++)
if (!h[j])
for (int w=x;w<=y;w++)
ma[j][w]=1;
}
for (int i=1;i<=n;i++)
if (!h[i])
for (int j=1;j<=m;j++)
if (!ma[i][j])
ans++;
printf(“%d\n”,n*m-ans);
return 0;
}

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
用C++工具信奥P2692普及组提高 覆盖&spm=1001.2101.3001.5002&articleId=144062902&d=1&t=3&u=f1001417083148e1bb770eec3349b345)
995

被折叠的 条评论
为什么被折叠?



