楠楠的学校有B个男生和G个女生都来到一个巨大的操场上,操场可以看成是N行M列的方格矩阵,如下图(1)是一个4行5列的方格矩阵。每个男生负责打扫一些连续的行,每个女生负责打扫一些连续的列。比如有两个男生,第一个男生负责第1、2两行、第二个男生负责第4行,如图(2)的蓝色。打扫的区域可能重复,比如,又有两个女生,第一个女生负责打扫第3、4两列,第二个女生负责打扫第4、5两列,如图(3)的红色。从图(3)可以容易看出,有颜色覆盖的方格数为18,即这4名学生总共打扫了18个方格。
老师要楠楠在学校给出打扫安排的数据后快速计算出这些学生总共打扫了多少方格?
输入
第一行4个正整数:N,M,B,G,N表示方阵行数,M表示方阵列数,B表示男生数,G表示女生数。
接下来B行,每行两个整数x y。表示相应某个男生负责打扫从第x行到第y行(共y-x+1行),保证1≤x≤y≤N。
再接下来G行,每行两个整数x y。表示相应某个女生负责打扫从第x列到第y列(共y-x+1列),保证1≤x≤y≤M。
输出
一个整数,表示所打扫的面积。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[5000],c[5000];
int e[5000][5000]={0};
int main()
{
int n,m,b,g,i,j,k;
int sum=0;
scanf(\"%d%d%d%d\",&n,&m,&b,&g);
for(i=1;i<=b;i++)
{
scanf(\"%d%d\",&a[i],&c[i]);
for(j=a[i];j<=c[i];j++)
{
e[j][3]=1;
}
}
for(i=1;i<=g;i++)
{
scanf(\"%d%d\",&a[i],&c[i]);
for(j=a[i];j<=c[i];j++)
{
e[0][j]=2;
}
}
int count1=0,count2=0;
for(i=0;i<=n;i++)
for(j=0;j<=m;j++)
{
if(e[i][j]==1)
{
sum+=m;
count1++;
}
if(e[i][j]==2)
{
sum+=n;
count2++;
}
}
printf(\"%d\\n\",sum-count1*count2);
return 0;
}
继续阅读与本文标签相同的文章
-
开发者必读 · 周报 | 002期
2026-05-19栏目: 教程
-
斩获2019中国金融科技创新大赛金奖,蚂蚁金服mPaaS助力打造超级App生态
2026-05-19栏目: 教程
-
有呀!互联网icp许可证除申请以外有转让的吗?飞起
2026-05-19栏目: 教程
-
Apache Zepplin使用Hive Interpreter查询
2026-05-19栏目: 教程
-
大宗货运如何实现“重去重回”?
2026-05-19栏目: 教程
