//poj 3695
#include <iostream>
using namespace std;
int n,m;
int st[1200000],ask[120000];
struct REC
{
int x1,y1,x2,y2;
}p[32];
void dfs(int xa,int ya,int xb,int yb,int deep,int flag,int sta)
{
if(xa>=xb||ya>=yb) return ;
if(deep==n){
if(sta){
for(int i=1;i<=m;++i)
if((ask[i]|sta)==ask[i])
st[ask[i]]+=flag*(xb-xa)*(yb-ya);
}
return ;
}
dfs(xa,ya,xb,yb,deep+1,flag,sta);
dfs(max(xa,p[deep+1].x1),max(ya,p[deep+1].y1),min(xb,p[deep+1].x2),min(yb,p[deep+1].y2),
deep+1,-flag,sta|(1<<deep));
}
int main()
{
int cases=0;
while(scanf("%d%d",&n,&m)==2){
if(n==0&&m==0)
break;
memset(st,0,sizeof(st));
memset(ask,0,sizeof(ask));
for(int i=1;i<=n;++i)
scanf("%d%d%d%d",&p[i].x1,&p[i].y1,&p[i].x2,&p[i].y2);
for(int i=1;i<=m;++i){
int t;
scanf("%d",&t);
while(t--){
int x;
scanf("%d",&x);
ask[i]|=(1<<(x-1));
}
}
dfs(0,0,INT_MAX,INT_MAX,0,-1,0);
printf("Case %d:\n",++cases);
for(int i=1;i<=m;++i)
printf("Query %d: %d\n",i,st[ask[i]]);
puts("");
}
return 0;
}
poj 3695 Rectangles 容斥原理解矩形面积并
最新推荐文章于 2019-08-31 22:59:41 发布