HDU 2461 Rectangles#容斥原理
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;
}
HDU 2461 Rectangles#容斥原理的更多相关文章
- hdu 2461 Rectangles
求矩形的并 矩形个数 1...20m次询问 回答要求的r个矩形的并容斥原理dfs优化: 遇到面积交为0时 这个dfs分支可以不下去了 #include <iostream> #includ ...
- HDU 1695 GCD#容斥原理
http://acm.hdu.edu.cn/showproblem.php?pid=1695 翻译题目:给五个数a,b,c,d,k,其中恒a=c=1,x∈[a,b],y∈[c,d],求有多少组(x,y ...
- hdu 2461(AC) & poj 3695(TLE)(离散化+矩形并)
Rectangles Time Limit: 5000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 4135 Co-prime(容斥原理)
Co-prime 第一发容斥,感觉挺有意思的 →_→ [题目链接]Co-prime [题目类型]容斥 &题意: 求(a,b)区间内,与n互质的数的个数. \(a,b\leq 10^{15}\) ...
- HDU 2056 Rectangles
Rectangles Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 5514 Frogs (容斥原理)
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=5514 题意 : 有m个石子围成一圈, 有n只青蛙从跳石子, 都从0号石子开始, 每只能越过a[i] ...
- hdu 5072 计数+容斥原理
/* 题意: 给出n个数(n<100000), 每个数都不大于100000,数字不会有重复.现在随意抽出3个,问三个彼此互质 或者 三个彼此不互质的数目有多少. 思路: 这道题反着想,就是三个数 ...
- hdu 2205(容斥原理)
Eddy's爱好 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- hdu 5072 Coprime 容斥原理
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...
随机推荐
- unity3d打开对话框
最近一直在忙项目,没时间更新博客,这两天趁空封装windows下的打开对话框,支持多选.其他系统可以用ngui或者ugui封装一个. 这里就不上封装的源码了提供dll供小伙伴们使用,如果有需要源码请请 ...
- 解析Properties文件
/** * 传入需要解析的文件属性,传入文件的路径 * @param para 需要获取的属性名称.也就是键值对中的键名称 * @param filepath * @return */ public ...
- Android设置窗体Activity背景透明
背景透明 style.xml <item name="android:windowBackground">@color/transparent</item> ...
- CodeForces 707B Bakery
枚举. 枚举每一条边,如果发现边的一端$f[u]=1$,另一端$f[v]=0$,那么更新答案,取最小值就好了. #pragma comment(linker, "/STACK:1024000 ...
- Python Data Visualization Cookbook 2.9.2
import numpy as np import matplotlib.pyplot as plt def is_outlier(points, threshold=3.5): if len(poi ...
- 51nod1092(lcs简单运用/dp)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1092 题意:中文题诶- 思路: 解法1:最坏的情况就是在原字 ...
- MySQL data路径为空解决方法
CMD x:\mysql\5.7.12\bin>mysqld --initialize-insecure --user=mysql
- Elastarchsearch安装搭建(一)
Elasticsearch是一个实时分布式搜索和分析引擎.一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全 ...
- [转] 你真的会写单例模式吗——Java实现
你真的会写单例模式吗——Java实现 原文:http://www.tuicool.com/articles/MBrUfy6 单例模式可能是代码最少的模式了,但是少不一定意味着简单,想要用好.用对单例模 ...
- Java I/O演进与Linux网络I/O模型
参考文章: 简书-浅谈Linux五种IO:http://www.jianshu.com/p/486b0965c296 一.linux基础概念 1.1 内存空间 linux系统中的使用的是虚拟存储器,即 ...