http://acm.hdu.edu.cn/showproblem.php?pid=2461

题目很简单,但是由于询问数M可以很大,所以容易超时,这道题学到了在结构体里面写函数的方法,这样子效率更高,否则的话,这道题就TLE了。

根据容斥原理,先把每个小长方形的面积加上,然后看有没有与该小长方形相交的,用dfs实现,当相交面积为0时,则不进行dfs,且同样遵循奇加偶减(但代码里因为是以第二个作为depth=1开始进行dfs的,所以是奇减偶加)。

AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;struct Node
{int x1,x2,y1,y2;Node cross(Node &R){Node tmp;tmp.x1=max(x1,R.x1);tmp.y1=max(y1,R.y1);tmp.x2=min(x2,R.x2);tmp.y2=min(y2,R.y2);return tmp;}int area(){if(x1>=x2||y1>=y2) return 0;return (x2-x1)*(y2-y1);}
}node[25];int num,r[25],ans;
void dfs(int depth,Node R,int index)
{Node tmp;for(int i=index;i<=num;i++){tmp=R.cross(node[r[i]]);if(tmp.area()){if(depth&1)ans-=tmp.area();else ans+=tmp.area();dfs(depth+1,tmp,i+1);}}
}int main()
{int n,m,cas=0;while(scanf("%d%d",&n,&m)&&n+m){cas++;for(int i=1;i<=n;i++)scanf("%d%d%d%d",&node[i].x1,&node[i].y1,&node[i].x2,&node[i].y2);printf("Case %d:\n",cas);for(int i=1;i<=m;i++){ans=0;scanf("%d",&num);for(int j=1;j<=num;j++)scanf("%d",&r[j]);for(int j=1;j<=num;j++){ans+=node[r[j]].area();dfs(1,node[r[j]],j+1);}printf("Query %d: %d\n",i,ans);}printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/atmacmer/p/5293586.html

HDU 2461 Rectangles#容斥原理相关推荐

  1. HDU 4135 Co-prime 容斥原理

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4135 题目描述: 给你A, B, N, 让你求A到B之间与N互质的数的个数 解题思路: 容斥原理, ...

  2. HDU 4135 Co-prime(容斥原理)

    Co-prime 第一发容斥,感觉挺有意思的 →_→ [题目链接]Co-prime [题目类型]容斥 &题意: 求(a,b)区间内,与n互质的数的个数. \(a,b\leq 10^{15}\) ...

  3. HDU - 4135 Co-prime(容斥原理)

    题目链接:点击查看 题目大意:给出一个区间[l,r],再给出一个n,问区间中有多少个数与n互质 题目分析:容斥原理应用的经典题目,马克一篇非常不错的博客,留着以后慢慢消化: https://blog. ...

  4. HDU 5514 Frogs (容斥原理)

    题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=5514 题意 : 有m个石子围成一圈, 有n只青蛙从跳石子, 都从0号石子开始, 每只能越过a[i] ...

  5. HDU 4407 Sum(容斥原理+状态压缩)

    题目链接 容斥原理不会,map不会,状态压缩不会.做毛线... 题目大意:给出1-n,n个数,有两个操作1是询问x-y区间上与p互质的数的和是多少,2是改变x位置上的数为c. 自己确实办不了,map这 ...

  6. HDU 4407 sum 容斥原理

    算法: 利用数据1...N的性质,求与P的互质的个数,位运算,容斥定理.. #include<stdio.h> #include<stdlib.h> #include<s ...

  7. hdu 2461(线段树求面积并)

    题意:给出N个矩形,M次询问 每次询问给出R个,问这R个矩形围成的面积 解题思路:对于每次询问,做一次线段树求面积的并操作. 每个节点保存的信息有l,r,cover,len分别表示该节点表示的区间[l ...

  8. Integer’s Power HDU - 3208(容斥原理)

    找出(l,r)内的所有的指数最大的次方和 因为一个数可能可以看成a^b和c^d,所以我需要去重,从后往前枚举幂数,然后找可以整除的部分,把低次幂的数去掉. 然后开n方的部分,先用pow()函数找到最接 ...

  9. HDU 5514 Frogs (容斥原理+因子分解)

    题目链接 题意:有n只青蛙,m个石头(围成圆圈).第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过的石头的下标总和是多少? 题解:暴力肯定会超时,首先分解出m的因子,自己本身不用分,因为石头编号是0 ...

最新文章

  1. php7的foreach遍历数组,PHP中使用foreach遍历三维数组
  2. HyperLedger Fabric链码开发及测试
  3. 机器人瓦力漫威_86、机器人瓦力
  4. .net 浏览器请求过程(图)
  5. 组播理论知识的补充笔记
  6. Java高级补充(Socket服务端、客户端)、Handler类、安卓Socket传数据、WebView
  7. error c4996: 'fopen' This function or variable may be unsafe如何解决
  8. Android自动化测试工具——Monkey
  9. spark学习-75-源代码:Endpoint模型介绍(6)-Endpoint的消息的接收(2)
  10. python物理建模初学者指南 pdf 脚本之家_Blender权威指南 罗聪翼 著 中文 PDF 清晰扫描版 [114M]...
  11. 【项目】数据仓库概述
  12. win10进程太多怎么优化_Windows 10加速优化全攻略,何止是快?
  13. 中科大网上财务报销填写流程
  14. python应用程序无法正常启动0xc000007b_应用程序无法正常启动0xc000007b怎么解决
  15. 26两种主界面的设计
  16. 二十九岁,刚读完了财富启蒙读物《小狗钱钱》
  17. notepad背景护眼模式设置
  18. 深入理解 iOS 开发中的锁
  19. 【Hive】distinct on different columns not supported with skew in data
  20. ANGULAR之中的$STATE、 $WATCH、 $SCOPE、 $ROOTSCOPE 分别是什么?

热门文章

  1. Sery送的书与网站短信解决方案
  2. 水晶报表加载失败的解决方法
  3. 三分钟带你掌握 CSS3 的新属性
  4. 前端面试---Vue部分考点梳理
  5. 我的vscode配置 利用Settings Sync一键安装
  6. node --- 使用mongoose连接mongoDB,并初始化所有的Schema
  7. node --- 使用nrm改变npm的源
  8. 可添加至收藏夹并在浏览器地址栏运行的JS代码
  9. springCloud Finchley 实战入门(基于springBoot 2.0.3)【三 Eureka-高可用服务注册中心】...
  10. Swift iOS : WebView缓存图片的方法