1. //离散化,x,y坐标分别按从小到大排序
  2. //离散化
  3. //1、首先分离出所有的横坐标和纵坐标分别按升序存入数组X[ ]和Y[ ]中.
  4. //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)
  5. //3、统计面积:area+=XY[i][j] *(X[i]-X[i-1])*(Y[i] – Y[i-1])
  6.  
  7. #include<iostream>
  8. #include<string.h>
  9. #include<stdio.h>
  10. #include <algorithm>
  11. using namespace std;
  12. double x[201],y[201],s[101][4];
  13. int xy[201][201] = {0};
  14. int n,cas=0;
  15. double sum1; // 并集面积
  16. double sum2; // 交集面积
  17. int main()
  18. {
  19. int i,j,k;
  20. while(cin>>n)
  21. {
  22. if(n==0)
  23. break;
  24. cas++;
  25. k=0;
  26. sum1 = 0.0;
  27. sum2 = 0.0;
  28. memset(xy,0,sizeof(xy));
  29. for(i=1;i<=n;i++)
  30. {
  31. cin>>s[i][0]>>s[i][1]>>s[i][2]>>s[i][3];
  32. x[k]=s[i][0];
  33. y[k]=s[i][1];
  34. k++;
  35. x[k]=s[i][2];
  36. y[k]=s[i][3];
  37. k++;
  38. }
  39. sort(x,x+2*n);
  40. sort(y,y+2*n);
  41. int kk = 0;
  42. for(k=1;k<=n;k++)
  43. {
  44. int i1,i2,j1,j2;
  45. for(i1=0;i1<2*n;i1++)
  46. {
  47. if(x[i1]==s[k][0])
  48. break;
  49. }
  50. for(i2=0;i2<2*n;i2++)
  51. {
  52. if(x[i2]==s[k][2])
  53. break;
  54. }
  55. for(j1=0;j1<2*n;j1++)
  56. {
  57. if(y[j1]==s[k][1])
  58. break;
  59. }
  60. for(j2=0;j2<2*n;j2++)
  61. {
  62. if(y[j2]==s[k][3])
  63. break;
  64. }
  65. for(i=i1;i<i2;i++)
  66. {
  67. for(j=j1;j<j2;j++)
  68. {
  69. xy[i][j] |= 1<<(k-1);
  70. }
  71. }
  72. kk |= 1<<(k-1); // 所有bit都置为1
  73. }
  74.  
  75. for(i=0;i<2*n;i++)
  76. {
  77. for(j=0;j<2*n;j++)
  78. {
  79. sum1 += ((xy[i][j] != 0 ? 1:0)*(x[i+1]-x[i])*(y[j+1]-y[j])); // 只要!=0,说明至少有一个矩形占据过
  80. sum2 += ((xy[i][j] == kk ? 1:0)*(x[i+1]-x[i])*(y[j+1]-y[j])); // 每个矩形都占据过这里
  81. }
  82. }
  83. printf("Test case #%d\n",cas);
  84. printf("并集面积: %.2f\n",sum1);
  85. printf("交集面积: %.2f\n",sum2);
  86. printf("\n");
  87. }
  88. return 0;
  89. }

输入:

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++ 矩形交集和并集的面积-离散化的更多相关文章

  1. 2019计蒜之道初赛4 B. 腾讯益智小游戏—矩形面积交(简单)(矩形交集)

    B. 腾讯益智小游戏—矩形面积交(简单) 1000ms 262144K   腾讯游戏开发了一款全新的编程类益智小游戏,最新推出的一个小游戏题目是关于矩形面积交的.聪明的你能解出来吗?看下面的题目接招吧 ...

  2. scala中集合的交集、并集、差集

    scala中有一些api设计的很人性化,集合的这几个操作是个代表: 交集: scala> Set(1,2,3) & Set(2,4) // &方法等同于interset方法 sc ...

  3. Python 集合set添加删除、交集、并集、集合操作符号

    在Python中集合set是基本数据类型的一种,它有可变集合(set)和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法. 1. ...

  4. python两个 list 交集,并集,差集的方法+两个tuple比较操作+两个set的交集,并集,差集操作+两个dict的比较操作

    转自:http://blog.chinaunix.net/uid-200142-id-3992553.html 有时候,为了需求,需要统计两个 list 之间的交集,并集,差集.查询了一些资料,现在总 ...

  5. java集合(交集,并集,差集)

    说明:这里没有求差集的代码,有了交集和并集,差集=并集-交集       package com; import java.util.ArrayList; import java.util.HashS ...

  6. 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  ...

  7. C# List 集合 交集、并集、差集、去重, 对象集合、 对象、引用类型、交并差补、List<T>

    关键词:C#  List 集合 交集.并集.差集.去重, 对象集合. 对象.引用类型.交并差.List<T> 有时候看官网文档是最高效的学习方式! 一.简单集合 Intersect 交集, ...

  8. ES6 使用数据类型Set求交集、并集、差集

    前言 ES6新增了数据类型Set,它是一种类似数组的数据结构.但它和数组的不同之处在于它的成员都是唯一的,也就是说可以用来去除数组重复成员. Set本身是一个构造函数用来生成Set数据结构. cons ...

  9. python-->(set /dict)交集 差集 并集 补集(功能用来做交差并补的)

    # ### 集合 作用:交集 差集 并集 补集(功能用来做交差并补的) '''特征:自动去重 无序''' #定义一个空集合 setvar = set() #set()强制转换成一个空集合的数据类型 p ...

随机推荐

  1. [刘阳Java]_CSS菜单侧边栏制作

    再来写一个菜单侧边栏的制作,先看截图 源代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF- ...

  2. [刘阳Java]_SpringMVC与Struts2的对比_第12讲

    今日来具体给讲讲SpringMVC与Struts2的对比,这样方便朋友们在工作中或者是面试学习中对这两者的区别有个更好的了解 把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的 ...

  3. ES 基础知识点总结

    为什么使用 ES? 在传统的数据库中,如果使用某列记录某件商品的标题或简介.在检索时要想使用关键词来查询某个记录,那么是很困难的,假设搜索关键词 "小米",那么 sql 语句就是 ...

  4. Spring 框架中都用到了哪些设计模式

    Spring 框架中都用到了哪些设计模式? Spring 框架中使用到了大量的设计模式,下面列举了比较有代表性的: 1.代理模式-在 AOP 和 remoting 中被用的比较多. 2.单例模式:在 ...

  5. 第三篇 -- IDEA 创建Springboot Web项目并用Jmeter测试

    上一节使用Django写的一个接口程序,这一节讲用IDEA配合Springboot创建web项目.一个是python,一个是java. 参考链接:http://www.uxys.com/html/Ja ...

  6. No_1 手写Proxy

    手写动态代理主要原理: userDAO=(UserDAO)Proxy.newProxyinstance(classloader,interfaces[],new MyInvocationHandler ...

  7. Hyper-V下Internal vSwitch的配置和Linux虚拟机的SSH连接

    最近工作中要在Windows Server 2016/Hyper-V 10中运行Ubuntu16实例,需要制作出"即插即用"的镜像文件,也就是安装好后即可从外部SSH进去.之前我使 ...

  8. 八数码难题之 A* 算法

    人生第一个A*算法-好激动-- 八数码难题--又称八数码水题,首先要理解一些东西: 1.状态可以转化成整数,比如状态: 1 2 3 4 5 6 7 8 0 可以转化成:123456780这个整数 2. ...

  9. 字符串连接 strcat

    1 //字符串连接 strcat 2 //将一个字符串连接到另一个字符串的末尾,组合成一个新字符串 3 4 #include<stdio.h> 5 #include<stdlib.h ...

  10. Top10 应用都在用的Android最新知识

    相信各位对Jetpack并不陌生,自从 Google 在 2018 年推出 Jetpack 之后,它就成为了 Android 未来发展的指向标. 作为一名安卓工程师,我们以前会经常吐槽Android碎 ...