描述
你所在的学校有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。
输出描述
一个整数,表示所打扫的面积。(即格子的总数)
c++代码:
#include<iostream>
using namespace std;
int main()
{
int n,m,b,g,a,c;
cin>>n>>m>>b>>g;
int s1=0,s2=0;
int li[n]={0};
int li2[m]={0};//两个数组
for (int i=0;i<b;i++)
{
cin>>a>>c;
for (int j=a;j<=c;j++)
{
if (li[j]!=1)
{
li[j]=1;
s1+=m;
s2++;
}
}
}
for (int i=0;i<g;i++)
{
cin>>a>>c;
for (int j=a;j<=c;j++)
{
if (li2[j]!=1)
{
li2[j]=1;
s1+=n-s2;
}
}
}
cout<<s1;
}