C++ 矩形交集和并集的面积-离散化
//离散化,x,y坐标分别按从小到大排序
//离散化
//1、首先分离出所有的横坐标和纵坐标分别按升序存入数组X[ ]和Y[ ]中.
//2、 设数组XY[ ][ ].对于每个矩形(x1,y1)(x2,y2)确定i1,i2,j1,j2,使得,X[i1]>x1,X[i2]<=x2,Y[i1]>y1,Y[i2]>=y2令XY[ i ][ j ] = 1 (i从i1到i2,j从j1到j2)
//3、统计面积:area+=XY[i][j] *(X[i]-X[i-1])*(Y[i] – Y[i-1]) #include<iostream>
#include<string.h>
#include<stdio.h>
#include <algorithm>
using namespace std;
double x[201],y[201],s[101][4];
int xy[201][201] = {0};
int n,cas=0;
double sum1; // 并集面积
double sum2; // 交集面积
int main()
{
int i,j,k;
while(cin>>n)
{
if(n==0)
break;
cas++;
k=0;
sum1 = 0.0;
sum2 = 0.0;
memset(xy,0,sizeof(xy));
for(i=1;i<=n;i++)
{
cin>>s[i][0]>>s[i][1]>>s[i][2]>>s[i][3];
x[k]=s[i][0];
y[k]=s[i][1];
k++;
x[k]=s[i][2];
y[k]=s[i][3];
k++;
}
sort(x,x+2*n);
sort(y,y+2*n);
int kk = 0;
for(k=1;k<=n;k++)
{
int i1,i2,j1,j2;
for(i1=0;i1<2*n;i1++)
{
if(x[i1]==s[k][0])
break;
}
for(i2=0;i2<2*n;i2++)
{
if(x[i2]==s[k][2])
break;
}
for(j1=0;j1<2*n;j1++)
{
if(y[j1]==s[k][1])
break;
}
for(j2=0;j2<2*n;j2++)
{
if(y[j2]==s[k][3])
break;
}
for(i=i1;i<i2;i++)
{
for(j=j1;j<j2;j++)
{
xy[i][j] |= 1<<(k-1);
}
}
kk |= 1<<(k-1); // 所有bit都置为1
} for(i=0;i<2*n;i++)
{
for(j=0;j<2*n;j++)
{
sum1 += ((xy[i][j] != 0 ? 1:0)*(x[i+1]-x[i])*(y[j+1]-y[j])); // 只要!=0,说明至少有一个矩形占据过
sum2 += ((xy[i][j] == kk ? 1:0)*(x[i+1]-x[i])*(y[j+1]-y[j])); // 每个矩形都占据过这里
}
}
printf("Test case #%d\n",cas);
printf("并集面积: %.2f\n",sum1);
printf("交集面积: %.2f\n",sum2);
printf("\n");
}
return 0;
}
输入:
2
10 10 20 20
15 15 25 25.5
输出:
Test case #1
并集面积: 180.00
交集面积: 25.00
输入:
3
10 10 20 20
15 8 30 15
17 13 25 25
输出:
Test case #2
并集面积: 245.00
交集面积: 6.00
转自:https://blog.csdn.net/fall221/article/details/12314489?locationNum=10&fps=1
C++ 矩形交集和并集的面积-离散化的更多相关文章
- 2019计蒜之道初赛4 B. 腾讯益智小游戏—矩形面积交(简单)(矩形交集)
B. 腾讯益智小游戏—矩形面积交(简单) 1000ms 262144K 腾讯游戏开发了一款全新的编程类益智小游戏,最新推出的一个小游戏题目是关于矩形面积交的.聪明的你能解出来吗?看下面的题目接招吧 ...
- scala中集合的交集、并集、差集
scala中有一些api设计的很人性化,集合的这几个操作是个代表: 交集: scala> Set(1,2,3) & Set(2,4) // &方法等同于interset方法 sc ...
- Python 集合set添加删除、交集、并集、集合操作符号
在Python中集合set是基本数据类型的一种,它有可变集合(set)和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法. 1. ...
- python两个 list 交集,并集,差集的方法+两个tuple比较操作+两个set的交集,并集,差集操作+两个dict的比较操作
转自:http://blog.chinaunix.net/uid-200142-id-3992553.html 有时候,为了需求,需要统计两个 list 之间的交集,并集,差集.查询了一些资料,现在总 ...
- java集合(交集,并集,差集)
说明:这里没有求差集的代码,有了交集和并集,差集=并集-交集 package com; import java.util.ArrayList; import java.util.HashS ...
- python List&Set&Dict交集、并集、差集
1.python List交集.并集.差集 1). 获取两个list 的交集#方法一: a=[2,3,4,5] b=[2,5,8] tmp = [val for val in a if val in ...
- C# List 集合 交集、并集、差集、去重, 对象集合、 对象、引用类型、交并差补、List<T>
关键词:C# List 集合 交集.并集.差集.去重, 对象集合. 对象.引用类型.交并差.List<T> 有时候看官网文档是最高效的学习方式! 一.简单集合 Intersect 交集, ...
- ES6 使用数据类型Set求交集、并集、差集
前言 ES6新增了数据类型Set,它是一种类似数组的数据结构.但它和数组的不同之处在于它的成员都是唯一的,也就是说可以用来去除数组重复成员. Set本身是一个构造函数用来生成Set数据结构. cons ...
- python-->(set /dict)交集 差集 并集 补集(功能用来做交差并补的)
# ### 集合 作用:交集 差集 并集 补集(功能用来做交差并补的) '''特征:自动去重 无序''' #定义一个空集合 setvar = set() #set()强制转换成一个空集合的数据类型 p ...
随机推荐
- python pandas inplace参数
'''pandas 中 inplace 参数在很多函数中都会有,它的作用是:是否在原对象基础上进行修改 inplace = True:不创建新的对象,直接对原始对象进行修改: inplace ...
- 牛客OI测试赛1
题目链接: https://www.nowcoder.com/acm/contest/181#question A.斐波拉契 求$f[n-1]*f[n+1]-f[n]^2$,$f[n]$为斐波拉契数列 ...
- Unittest方法 -- 测试断言
"""断言详解"""from unittest_1.it import *def add(a,b): return a - bclass B ...
- 在Java中,负数的绝对值竟然不一定是正数!!!
绝对值是指一个数在数轴上所对应点到原点的距离,所以,在数学领域,正数的绝对值是这个数本身,负数的绝对值应该是他的相反数. 这几乎是每个人都知道的. 在Java中,想要获得有个数字的绝对值,可以使用ja ...
- Qt开源作品38-无边框窗体方案(无抖动,支持win、linux、mac等系统,侧边半屏顶部全屏)
一 前言 不知道各位程序员有没有遇到过这样一种困惑,好不容易在开源网站找到了类似的想要的项目代码,结果down下来一编译,我勒个去,几百个错误,根本没法用,熟悉的人还好可以直接阅读代码进行修改(有些只 ...
- Java大整形BigInteger的用法
基本类型int有32位,范围是:[-2147483648, 2147483647](正负21亿多) 基本类型long有64位,范围是:[-9223372036854775808, 9223372036 ...
- Spring in Action学习笔记(2)
Spring基础 AOP 面向切面编程 通知.连接点.切点.切面 Spring提供 4 种类型的AOP支持: 基于代理的经典SpringAOP:使用ProxyFactoryBean. 纯POJO切面: ...
- JAVA预科:Markdown基础语法
JAVA预科:Markdown语法 什么是Markdown?Markdown是一种轻量级的「标记语言」,通常为程序员群体所用,目前它已是全球最大的技术分享网站 GitHub 和技术问答网站 Stack ...
- Java书单-比较全的一篇
本文已收录至码云:https://gitee.com/jalon2015/java-book 前言 之前写过一篇,Java核心书单,里面涵盖了几本主要的Java书籍: 后来有朋友反馈说,这几本太少了, ...
- Java数组04——多维数组
多维数组 package array; public class ArrayDemon06 { public static void main(String[] args) { ...