POJ 3695
可以用容斥原理来求。求两个矩形的并的时候可以使用条件
x1=max(p.x1,q.x1);
y1=max(p.y1,q.y1);
x2=min(p.x2,q.x2);
y2=min(p.y2,q.y2);
而
if(x2>x1&&y2>y1)可以并,否则,并不了。
。。。
开始时,我对每个询问都做一次容斥原理,TLE。可以这样改进一下。对每个询问,用了哪些矩形可以用一个二进制的数来存起来。对所有的矩形做一次DFS,然后判断当一个组合内的矩形均属于某个询问内(可用二进制或计算),则按照容斥原理公式计算即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define M 100005
using namespace std; struct Rectangle{
int x1,y1,x2,y2;
};
Rectangle r[25];
int status[1250000];
int choice[M];
int ans; bool WhetherRec(int x1,int y1,int x2,int y2){
if(x2>x1&&y2>y1)
return true;
return false;
} void dfs(int i,int num,Rectangle p,int al,int sta,int ml){ if(i>=al){
if(num==0){
for(int k=1;k<=ml;k++)
status[choice[k]]=0;
}
else if(num&1){
for(int k=1;k<=ml;k++){
if((sta|choice[k])<=choice[k])
status[choice[k]]+=(p.x2-p.x1)*(p.y2-p.y1);
}
}
else{
for(int k=1;k<=ml;k++){
if((sta|choice[k])<=choice[k])
status[choice[k]]-=(p.x2-p.x1)*(p.y2-p.y1);
}
}
return ;
} dfs(i+1,num,p,al,sta,ml);
Rectangle tmp;
int x1=max(p.x1,r[i].x1);
int y1=max(p.y1,r[i].y1);
int x2=min(p.x2,r[i].x2);
int y2=min(p.y2,r[i].y2);
if(WhetherRec(x1,y1,x2,y2)){
tmp.x1=x1; tmp.x2=x2;
tmp.y1=y1; tmp.y2=y2;
dfs(i+1,num+1,tmp,al,sta|(1<<(i)),ml);
}
} void work(int n,int m){
Rectangle p;
p.x1=p.y1=0; p.x2=p.y2=1000;
dfs(0,0,p,n,0,m);
} int main(){
int kase=0;
int n,m,k,tmp,sta;
while(scanf("%d%d",&n,&m),n||m){
kase++;
for(int i=0;i<n;i++)
scanf("%d%d%d%d",&r[i].x1,&r[i].y1,&r[i].x2,&r[i].y2);
for(int i=1;i<=m;i++){
scanf("%d",&k);
sta=0;
for(int p=0;p<k;p++){
scanf("%d",&tmp);
sta=(sta|(1<<(tmp-1)));
}
choice[i]=sta;
}
work(n,m);
printf("Case %d:\n",kase);
for(int e=1;e<=m;e++){
printf("Query %d: %d\n",e,status[choice[e]]);
}
printf("\n");
}
return 0;
}
POJ 3695的更多相关文章
- hdu 2461(AC) & poj 3695(TLE)(离散化+矩形并)
Rectangles Time Limit: 5000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- [转] POJ计算几何
转自:http://blog.csdn.net/tyger/article/details/4480029 计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板 ...
- ACM计算几何题目推荐
//第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...
- HDU 3695 / POJ 3987 Computer Virus on Planet Pandora(AC自动机)(2010 Asia Fuzhou Regional Contest)
Description Aliens on planet Pandora also write computer programs like us. Their programs only consi ...
- HDU 3695 / POJ 3987 Computer Virus on Planet Pandora
Computer Virus on Planet Pandora Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1353 ...
- hdu 3695:Computer Virus on Planet Pandora(AC自动机,入门题)
Computer Virus on Planet Pandora Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 256000/1280 ...
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22286 ...
随机推荐
- 计算机网络系统--TCP/IP OSI模型
- [SharePoint2010开发入门经典]SPS2010列表编程
本章概要: 1.理解SPS2010列表的结构和功能 2.使用客户端和服务器端对象模型,web service,wcf和RESTful service进行列表编程. 3.理解方法的使用 4.类表编程
- 由free命令想到的
root@xdj-Z9PA-D8-Series:~# free -m total used free shared buffers cached Mem: 15977 1683 14293 0 132 ...
- UIButton上字体的对齐方式
设置UIButton上字体的对齐方式,不是用: [Button.titleLabel setTextAlignment:UITextAlignmentCenter]; 而是用: [Button set ...
- 用PHP去实现静态化
我们在PHP站点开发过程中为了站点的推广或者SEO的须要,须要对站点进行一定的静态化,这里设计到什么是静态页面,所谓的静态页面.并非页面中没有动画等元素,而是指网页的代码都在页面中,即不须要再去执行P ...
- Web Service学习-CXF开发Web Service实例demo(一)
Web Service是什么? Web Service不是框架.更甚至不是一种技术. 而是一种跨平台,跨语言的规范 Web Service解决什么问题: 为了解决不同平台,不同语言所编写的应用之间怎样 ...
- HDU 5045 DP+状压
2014 ACM/ICPC Asia Regional Shanghai Online 给出N个人做M道题的正确率,每道题仅仅能由一个人做出,而且当全部人都做出来且仅做出一道题时,做过题的人才干够继续 ...
- Apache Pig的前世今生
近期,散仙用了几周的Pig来处理分析我们站点搜索的日志数据,感觉用起来非常不错,今天就写篇笔记介绍下Pig的由来,除了搞大数据的人,可能非常少有人知道Pig是干啥的.包含一些是搞编程的,但不是搞大数据 ...
- 【翻译自mos文章】11.2.0.4及更高版本号的asm实例中MEMORY_TARGET 和 MEMORY_MAX_TARGET的默认值和最小值
[翻译自mos文章]11.2.0.4及更高版本号的asm实例中MEMORY_TARGET 和 MEMORY_MAX_TARGET的默认值和最小值 来源于: Default and Minimum ME ...
- Shell脚本:推断用户和用户组是否已经存在/创建用户和用户组
通常作为一个应用程序的部署脚本,開始的第一项工作是为当前应用创建一个专用(dedicated)的用户和用户组.这个脚本非常easy.这里贴一个參考样本: #!/bin/sh user=test_use ...