可以用容斥原理来求。求两个矩形的并的时候可以使用条件

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的更多相关文章

  1. hdu 2461(AC) & poj 3695(TLE)(离散化+矩形并)

    Rectangles Time Limit: 5000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. [转] POJ计算几何

    转自:http://blog.csdn.net/tyger/article/details/4480029 计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板 ...

  3. ACM计算几何题目推荐

    //第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...

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

  5. HDU 3695 / POJ 3987 Computer Virus on Planet Pandora

      Computer Virus on Planet Pandora Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1353 ...

  6. hdu 3695:Computer Virus on Planet Pandora(AC自动机,入门题)

    Computer Virus on Planet Pandora Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 256000/1280 ...

  7. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  8. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  9. POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22286 ...

随机推荐

  1. JS冒泡和闭包案例分析

    背景: 今天逛网页发现了百度知道上一个有意思的JS问题,提问者的问题事实上蛮简单的,懂点前端开发技术的应该都能实现.提问者的要求:实现子菜单的弹出,菜单共同拥有三级.每级菜单显示时有500毫秒的延迟. ...

  2. 《coredump问题原理探究》Linux x86版7.8节vector相关的iterator对象

    在前面看过了一个vectorcoredump的样例,接触了vector的iterator,能够知道vector的iterator仅仅有一个成员_M_current指向vector某一个元素. 先看一个 ...

  3. YunOS曙光初现----看好阿里云OS----阿冬专栏!!

    阿里云os - YunOS 阿里云OS(YunOS)是阿里巴巴集团的智能手机操作系统,依托于阿里巴巴集团电子商务领域积累的经验和强大的云计算平台,基于LINUX开发. 魅族4阿里yun OS版已上市. ...

  4. Pocket英语语法---六、感官动词接不同的动词表示什么意思

    Pocket英语语法---六.感官动词接不同的动词表示什么意思 一.总结 一句话总结:其实进行时一般是表示连续,动词原形一般表示常态,过去分词一般表示被动(或者完成). 感官动词接原型表示动作的一般情 ...

  5. [C#] 隐式类型var —— 示例解析

    从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...

  6. Bata版本

    一.团队成员 1)冯鹏(组长) 201731062617 2)鲜泽   201731062612 3)李家豪 201731062614 4)郭经伟 201731062615 5)程前勇 2017310 ...

  7. 解决Ubuntu不能全屏问题

    解决虚拟机中Ubuntu14.04系统安装VM Tools 时出现以下信息: 请确保您已登录客户机操作系统.在客户机中装载CD驱动器启动终端,使用tar解压缩安装程序,然后执行vmware-insal ...

  8. git工具的安装和使用

    啰嗦几句: 世界上本没有后悔药,但软件开发提供了后悔药,那就是代码管理工具.它可以让你的代码穿越回以前的状态,甚至可以指定某一个时刻,而且还可以穿越回来. 当下流行的代码管理工具有 SVN 和 GIT ...

  9. 微信小程序 input使用letter-spacing失效问题

    根据ui设计稿, 本来思路是一个input搞定,下面的线使用背景图 background:url('/images/line.png')no-repeat bottom center; 然后使用let ...

  10. 关于requestAnimationFrame()和cancelAnimationFrame()与定时器之间的比较

    在渲染页面动画的时候,其实也没有必要用定时器(setInterval),其实requestAnimationFrame()和cancelAnimationFrame()也能达到相应的效果,他是HTML ...