• 【洛谷 2692】覆盖


    题目背景

    WSR的学校有B个男生和G个女生都来到一个巨大的操场上扫地。

    题目描述

    操场可以看成是N 行M 列的方格矩阵,如下图(1)是一个4 行5 列的方格矩阵。每个男生负责打扫一些连续的行,每个女生负责打扫一些连续的列。比如有两个男生,第一个男生负责第1、2 两行、第二个男生负责第4 行,如图(2)的蓝色。打扫的区域可能重复,比如,又有两个女生,第一个女生负责打扫第3、4 两列,第二个女生负责打扫第4、5 两列,如图(3)的红色。从图(3)可以容易看出,有颜色覆盖的方格数为18,即这4 名学生总共打扫了18 个方格。

    老师要WSR在学校给出打扫安排的数据后快速计算出这些学生总共打扫了多少方格?

    输入输出格式

    输入格式:

    第一行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。

    输出格式:

    一个整数,表示所打扫的面积。(即格子的总数)

    输入输出样例

    输入样例#1: 复制
    4 5 2 2
    1 2
    4 4
    3 4
    4 5
    输出样例#1: 复制
    18

    说明

    不会可以自己画图。

    数据范围:

    8 个的数据:N,M,B,G 的范围都是[1…100]

    2 个的数据:N,M,B,G 的范围都是[1…5,000]

    题解:正如上题所言,哈哈数学题,用桶统计每一行每一列,开两个即可。

    // luogu-judger-enable-o2
    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    typedef long long ll;
    using namespace std;
    int n,m,b,g,xx,yy,x[5005],y[5005],p1,p2;
    void inboy(){
        for(int i=1;i<=b;i++){
            cin>>xx>>yy;
            for(int j=xx;j<=yy;j++) y[j]=1;
        }
    }
    void ingirl(){
        for(int i=1;i<=g;i++){
            cin>>xx>>yy;
            for(int j=xx;j<=yy;j++) x[j]=1;
        }
    }
    void work(){
        for(int i=1;i<=n;i++) if(y[i]!=0) p1++;
        for(int i=1;i<=m;i++) if(x[i]!=0) p2++;
        cout<<p1*m+p2*n-p1*p2<<endl;
    }
    int main(){
        cin>>n>>m>>b>>g;
        inboy(); 
        ingirl();
        work();
        return 0;
    }
  • 相关阅读:
    解决mysqldump: Got error: 1044: Access denied for user
    Ubuntu技巧之 is not in the sudoers file解决方法
    mysql日志详细解析
    linux利用grep查看打印匹配的下几行或前后几行的命令
    Linux无法使用userdel删除用户和组的解决办法
    ubuntu快速清理磁盘垃圾
    smarty中math函数的用法
    metinfo首页内容简介
    linux命令别名的使用
    mysql 导出表结构和表数据 mysqldump用法
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11216193.html
Copyright © 2020-2023  润新知