Rectangles

Time Limit: 5000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1497    Accepted Submission(s): 773

Problem Description
You
are developing a software for painting rectangles on the screen. The
software supports drawing several rectangles and filling some of them
with a color different from the color of the background. You are to
implement an important function. The function answer such queries as
what is the colored area if a subset of rectangles on the screen are
filled.
 
Input
The
input consists of multiple test cases. Each test case starts with a
line containing two integers N(1 ≤ N ≤ 20) and M(1 ≤ M ≤ 100000),
indicating the number of rectangles on the screen and the number of
queries, respectively.
The i-th line of the following N lines
contains four integers X1,Y1,X2,Y2 (0 ≤ X1 < X2 ≤ 1000, 0 ≤ Y1 <
Y2 ≤ 1000), which indicate that the lower-left and upper-right
coordinates of the i-th rectangle are (X1, Y1) and (X2, Y2). Rectangles
are numbered from 1 to N.
The last M lines of each test case describe
M queries. Each query starts with a integer R(1<=R ≤ N), which is
the number of rectangles the query is supposed to fill. The following
list of R integers in the same line gives the rectangles the query is
supposed to fill, each integer of which will be between 1 and N,
inclusive.

The last test case is followed by a line containing two zeros.
 
Output
For each test case, print a line containing the test case number( beginning with 1).
For
each query in the input, print a line containing the query number
(beginning with 1) followed by the corresponding answer for the query.
Print a blank line after the output for each test case.
思路:容斥原理;
感觉这题的数据有点水,按照这个复杂度O(2^n*m)是 感觉会超时的;
跑了1200多Ms。
思路很简单,就是容斥求面积。
  1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<stack>
7 #include<map>
8 using namespace std;
9 typedef struct pp
10 {
11 int x1;
12 int y1;
13 int x2;
14 int y2;
15 } ss;
16 ss ju[30];
17 int quer[1<<22];
18 int cnt[30];
19 int aa[1<<22];
20 int bt[30];
21 int cp[100005];
22 int ask[100005];
23 int tt[100];
24 int N;
25 void dfs(int k,int u);
26 int main(void)
27 {
28 int i,j,k,p,q;
29 int kk=0;
30 while(scanf("%d %d",&p,&q),p!=0&&q!=0)
31 {
32 kk++;
33 memset(ask,0,sizeof(ask));
34 for(i=0; i<p; i++)
35 {
36 scanf("%d %d %d %d",&ju[i].x1,&ju[i].y1,&ju[i].x2,&ju[i].y2);
37 }
38 int s;
39 int n;
40 for(s=0; s<q; s++)
41 {
42 N=0;
43 scanf("%d",&n);
44 int mn=0;
45 int dd;
46 for(i=0; i<n; i++)
47 {
48 scanf("%d",&dd);
49 mn|=(1<<(dd-1));
50 }
51 cp[s]=mn;
52 }
53 int flag[23];
54 for(i=1; i<=(1<<p)-1; i++)
55 {
56 int cn=0;
57 memset(flag,0,sizeof(flag));
58 for(j=0; j<p; j++)
59 {
60 if(i&(1<<j))
61 {
62 cn++;
63 flag[j]=1;
64 }
65 }
66 int nn;
67 int ak=0;
68 for(nn=0; nn<22; nn++)
69 {
70 if(flag[nn])
71 {
72 cnt[ak++]=nn;
73 }
74 }
75 int mm;
76 int xx1,yy1,xx2,yy2;
77 xx1=ju[cnt[0]].x1;
78 yy1=ju[cnt[0]].y1;
79 xx2=ju[cnt[0]].x2;
80 yy2=ju[cnt[0]].y2;
81 int uu=0;
82 for(nn=1; nn<ak; nn++)
83 {
84 if(xx1>=ju[cnt[nn]].x2)
85 {
86 uu=1;
87 aa[i]=0;
88 break;
89 }
90 else if(xx2<=ju[cnt[nn]].x1)
91 {
92 uu=1;
93 aa[i]=0;
94 break;
95 }
96 else if(yy1>=ju[cnt[nn]].y2)
97 {
98 uu=1;
99 aa[i]=0;
100 break;
101 }
102 else if(yy2<=ju[cnt[nn]].y1)
103 {
104 uu=1;
105 aa[i]=0;
106 break;
107 }
108 else
109 {
110 xx1=max(xx1,ju[cnt[nn]].x1);
111 yy1=max(yy1,ju[cnt[nn]].y1);
112 xx2=min(xx2,ju[cnt[nn]].x2);
113 yy2=min(yy2,ju[cnt[nn]].y2);
114 }
115 }
116 if(!uu)
117 {
118 int miji=abs(xx1-xx2)*abs(yy1-yy2);
119 aa[i]=miji;
120 for(s=0; s<q; s++)
121 {
122 int gg=cp[s]|i;
123 if(gg<=cp[s])
124 {
125 if(cn%2)
126 {
127 ask[s]+=aa[i];
128 }
129 else ask[s]-=aa[i];
130 }
131 }
132 }
133 }
134 printf("Case %d:\n",kk);
135 for(j=0; j<q; j++)
136 {
137 printf("Query %d: ",j+1);
138 printf("%d\n",ask[j]);
139 }
140 printf("\n");
141 }
142 return 0;
143 }
 

Rectangles(hdu2461)的更多相关文章

  1. Rectangles hdu2461容斥定理

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

  2. hdu2461 Rectangles 线段树--扫描线

    You are developing a software for painting rectangles on the screen. The software supports drawing s ...

  3. poj-1314 Finding Rectangles

    题目地址: http://poj.org/problem?id=1314 题意: 给出一串的点,有些点可以构成正方形,请按照字符排序输出. 因为这道题的用处很大, 最近接触的cv 中的Rectangl ...

  4. [ACM_暴力][ACM_几何] ZOJ 1426 Counting Rectangles (水平竖直线段组成的矩形个数,暴力)

    Description We are given a figure consisting of only horizontal and vertical line segments. Our goal ...

  5. codeforces 713B B. Searching Rectangles(二分)

    题目链接: B. Searching Rectangles time limit per test 1 second memory limit per test 256 megabytes input ...

  6. White Rectangles[HDU1510]

    White Rectangles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. Java基础之在窗口中绘图——绘制直线和矩形(Sketcher 2 drawing lines and rectangles)

    控制台程序. import javax.swing.JComponent; import java.util.*; import java.awt.*; import java.awt.geom.*; ...

  8. Counting Rectangles

    Counting Rectangles Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1043 Accepted: 546 De ...

  9. UVA 10574 - Counting Rectangles 计数

    Given n points on the XY plane, count how many regular rectangles are formed. A rectangle is regular ...

随机推荐

  1. acquire, acre, across

    acquire An acquired taste is an appreciation [鉴赏] for something unlikely to be enjoyed by a person w ...

  2. json模块中函数的用法

    json模块中主要使用四个函数:json.load(),json.dump(),json.loads(),json.dumps() json.loads()是将一个json编码的字符串转换成pytho ...

  3. HelloWorldModelMBean

    package mbeanTest; import java.lang.reflect.Constructor; import javax.management.Descriptor; import ...

  4. OkHttp3 使用

    导入 compile 'com.squareup.okhttp3:okhttp:3.3.0' GET请求 String url = "https://www.baidu.com/" ...

  5. Mysql不锁表备份之Xtrabackup的备份与恢复

    一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...

  6. 3.1 go context代码示例

    context.WithCancel返回两个有关联的对象,ctx与cancel,调用cancel发送一个空struct给ctx,ctx一旦接收到该对象后,就终止goroutine的执行;ctx是线程安 ...

  7. 【Spring Framework】Spring入门教程(三)使用注解配置

    本文主要介绍四个方面: (1) 注解版本IOC和DI (2) Spring纯注解 (3) Spring测试 (4) SpringJDBC - Spring对数据库的操作 使用注解配置Spring入门 ...

  8. JS 的三种定义变量 var let const

    Let 只在 let 命令所在的代码块内有效,在外就会报错 Let 是块级作用域,函数内部使用let定义后,对函数外部无影响 Let/const 不存在变量提升,使用前一定要声明后,在使用,否则会报错 ...

  9. jupyter的使用技巧

    具体安装教程参见上一篇博客. 1.有几种格式code,编码模式:markdown注释格式: 2.如果出现no module named 'XX' ,需要在anaconda prompt中使用conda ...

  10. 全面解析 | 钥匙环服务的应用场景&商业价值

    在互联互通的场景驱动下,同一开发者旗下常常拥有多款应用或者多个应用形态,用户在同一设备的不同应用或端口登录时,即便使用同一帐号,仍需要重复输入密码进行验证,操作复杂,直接影响到用户的使用体验,而华为钥 ...