zoukankan      html  css  js  c++  java
  • 图形面积

    Description

    桌面上放了N个平行于坐标轴的矩形,这N个矩形可能有互相覆盖的部分,求它们组成的图形的面积。

    Input

    输入第一行为一个数N(1≤N≤100),表示矩形的数量。下面N行,每行四个整数,分别表示每个矩形的左下角和右上角的坐标,坐标范围为–108到108之间的整数。

    Output

    输出只有一行,一个整数,表示图形的面积。

    Sample Input

    3
    1 1 4 3
    2 -1 3 2
    4 0 5 2

    Sample Output

    8
    .
    .
    .
    .
    .
    .
    分析
    离散化
    我们把横纵坐标都映射到一个坐标系中
    接着我们枚举横纵坐标
    若该点存在于某一个矩形中
    则答案累加
    图:
    在这里插入图片描述
    .
    .
    .
    .
    .
    程序:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    long long x1[101],y1[101],x[201],x2[101],y2[101],y[201];
    int n;
    int main()
    {
    	scanf("%d",&n);
    	for (int i=1;i<=n;i++)
    	{
    		scanf("%lld%lld%lld%lld",&x1[i],&y1[i],&x2[i],&y2[i]);
    		x[i*2-1]=x1[i];
    		x[i*2]=x2[i];
    		y[i*2-1]=y1[i];
    		y[i*2]=y2[i];
    	}
    	sort(x+1,x+2*n+1);
    	sort(y+1,y+2*n+1);
    	long long ans=0;
    	for (int i=2;i<=2*n;i++)
            for(int j=2;j<=2*n;j++) 
            { 
                long long s=(long long)(x[i]-x[i-1])*(long long)(y[j]-y[j-1]);
                for (int k=1;k<=n;k++) 
                    if (x[i-1]>=x1[k]&&y[j-1]>=y1[k]&&x[i]<=x2[k]&&y[j]<=y2[k])
                    { 
    					ans=(long long)ans+s;
    					break; 
    				}
            } 
        printf("%lld",ans); 
    	return 0; 
    }
    
  • 相关阅读:
    线程安全
    转 接口和抽象类 虚方法 有什么区别
    转 面向对象的三个基本特征
    转载 泛型
    遍历list,字典
    转 拉姆达表达式,委托、匿名方法、Lambda表达式的演进
    int byte转换
    委托,匿名方法
    带参数线程,不带参数线程
    const readonly
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/10292808.html
Copyright © 2011-2022 走看看