上浮法或漂浮法

题意:给一张白纸,按顺序往上面贴有颜色且不透明的矩形,求最后能看到的颜色以及每种颜色的面积。

思路:对每个矩形而言,它最后能有多少被看见,取决于它后面的矩形。所以从后往前处理,就像一个矩形从最底下上浮,碰到它上面的矩形就分成若干块,到水面上时更新答案。递归表示剩余的可见矩形,然后模拟上浮过程。

 1 struct Node {
 2     int x1, y1, x2, y2, color;
 3     void inp() {
 4         scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &color);
 5         x1 ++;
 6         y1 ++;
 7     }
 8 };
 9 Node node[1007];
10 int n, cnt[2600];
11
12 void dfs(int pos, int color, int l, int r, int u, int d) {
13     while (pos < n && (node[pos].x2 < l || node[pos].x1 > r || node[pos].y1 > u || node[pos].y2 < d)) pos ++;
14     if (pos == n) {
15         cnt[color] += (r - l + 1) * (u - d + 1);
16         return ;
17     }
18     if (l < node[pos].x1) { dfs(pos + 1, color, l, node[pos].x1 - 1, u, d); l = node[pos].x1; }
19     if (r > node[pos].x2) { dfs(pos + 1, color, node[pos].x2 + 1, r, u, d); r = node[pos].x2; }
20     if (d < node[pos].y1) { dfs(pos + 1, color, l, r, node[pos].y1 - 1, d); d = node[pos].y1; }
21     if (u > node[pos].y2) { dfs(pos + 1, color, l, r, u, node[pos].y2 + 1); u = node[pos].y2; }
22 }
23
24 int main() {
25     //freopen("in.txt", "r", stdin);
26     int T, a, b;
27     cin >> T;
28     while (T--) {
29         cin >> a >> b >> n;
30         rep_up0(i, n) {
31             node[i].inp();
32         }
33         mem0(cnt);
34         rep_down0(i, n) {
35             dfs(i + 1, node[i].color, node[i].x1, node[i].x2, node[i].y2, node[i].y1);
36         }
37         int sum = 0;
38         rep_up1(i, 2500) sum += cnt[i];
39         cnt[1] += a * b - sum;
40         rep_up1(i, 2500) {
41             if (cnt[i]) {
42                 printf("%d %d\n", i, cnt[i]);
43             }
44         }
45     }
46     return 0;
47 }

时间: 2024-08-08 13:51:34

上浮法或漂浮法的相关文章

USACO window area 漂浮法

这道题是求解几个矩形未被遮挡的面积问题, 可以使用漂浮法来解决, 什么事漂浮法请看这里http://www.nocow.cn/index.php/USACO/window, 代码如下: /* ID: m1500293 LANG: C++ PROG: window */ #include <cstdio> #include <algorithm> #include <cstring> using namespace std; char s[80]; int buttom,

单身北漂生活二、三事(上)——北漂18年(8)

本周跟朋友吃饭,又聊起为啥要写这个系列.我想了一下,回答:"怕忘.人过30岁,精力.体力.脑力都逐年下降.我三十有八了,要趁着还没忘,多写写--" 97年来北京那会儿还没搞对象,确切地说就没搞过对象.不是因为什么醉心学习之类的理由,一来是没想搞,二来确实也搞不上--脾气太差(是天津人所说的那种宁种),三是缘分没到.不能说在上学的时候完全没有女生对我表示我意思,每个我都感觉不合适.当然了,也有我追了,但是没追上的.具体数字,您慢慢猜吧-- 我其实追过班上所有看着还行,没有对象的女生,一个

usaco-3.1-PROB Shaping Regions-漂浮法

漂浮法,顾名思义,就是一块块的往上飘. 以逆序来进行放置,即n to 1.逆序的好处在于放置一个矩形后,俯视看到的就是最终俯视该矩形应该看到的.因为挡着它的矩形在之前已经放置好了,所以可直接统计,为递归创造了条件.每放一个矩形,可以想象成将其扔入一密度很大的海水底部,海分成了n层,然后矩形开始向上浮.在上浮过程中若碰撞到其他的矩形则断裂成几个小矩形,继续上浮,直到浮出水面.于是想到用个递归来模拟上浮过程. /* ID: rowanha3 LANG: C++ TASK: rect1 */ #inc

反思:毕业入职的第一家公司

得到这第一份工作,说来还真有几分传奇.大四下学期一开学,就买好去深圳的火车票,和同学几个踏上了南漂的路.由于是穷学生,所以买了硬卧票,很巧的是在火车上遇到了一个潜江的老乡,反正火车要开一天一夜也怪无聊的,于是在火车过道找了个桌子几个年轻小伙就开始畅谈人生和憧憬未来.这位刚认识的老乡年龄和我们差不多,但社会经验比我们丰富很多,于是就说起他在中专技校里面是如何半夜溜出去上网,毕业如何被分配到工厂做车厂机加工人,说和自己同班出来做机加工人的一个女同学的女同事由于金属镁粉过敏全身都红肿,那个女同学见到这

母亲的爱

每个人都希望从小得到父母的疼爱,我也一样.但在我8岁的那年,一场无情的车祸永远地带走了我父亲,当时觉得仿佛已经失去了大半个世界,只剩下我和母亲相依为命. 小的时候,家里的条件并不好,一家人靠父亲一个人在工地上干活支撑着整个家庭的开支,然而,因为那场车祸,使我们家在一夜之间完全没了经济来源,这无疑是天大的噩耗.当时的我刚好上学,正是需要用钱的时候,没有办法,母亲只能选择出去找事情做.母亲没有什么文化,小学都没有上完,因此找到的事情也只是一些体力活.每天天还没亮就出去,天黑才回来,从小我和母亲待在一

一个java程序员的真实经历

半路出家的老java程序员的一点感悟 我是一个老java程序员,现在基本告别编码时代了,当然我现在还在写代码,不是为了老板写了,是自己在创业.回想起这么多年的人生路,作为一名老程序员感慨颇多,尤其是作为一名半路出家的程序员,其中的滋味更是感慨万分.下面我就自己说说我的经历,也许会给未来码农一点启发. 首先讲讲我是怎么成为一个程序员的,这个还真要说说中国的教育.我们国家的这种应试教育一直受到很多人的诟病,有的指责扼杀了学生的创造力,有的指责培养出来的学生就像火腿厂生产的香肠,都是一个味毫无特点而言

投资项目怎么做

六月,是一朵莲,她睡在绿叶中,你瞧,她从梦中笑醒了.原来,我对着一朵莲花叫您时,满池的莲花都微笑了…… 轻掂脚尖,移步莲池.那又是谁,酣梦微醒中清香“呓语”:轻点,再轻点,不要惊了我的情,搅了我的梦. 荷塘,我只见花开,不见你来…… “灼灼荷花瑞,亭亭出水中.一径孤引绿,双影共分红.”美人笑隔盈盈水,风轻轻,鸟鸣呤,柔嫩的喜悦,在浅夏的风中恣意生长喃喃不休.傍晚,撑一竿青色,踏一叶扁舟,穿越千年,涉水而来.风吹彼岸垂杨柳,鱼儿莲间游,幽幽荷香,潺潺涟漪,清风弄影,欲语还休,脉脉温情,款款留芳.一

关于dp dip dpi px

在Android开发中,屏幕适配是一件非常让人头疼的事情.有时候在这个机型上调试的漂漂亮亮的UI界面,换一部手机就丑的不忍直视.但为了我们软件更好的用户体验,我们必须适应Android市场上形形色色的手机. 你像做前端的人,为了给用户最优质的体验,他们也需要适配各种不同分辨率的屏幕啊,但是他们为什么不需要为这个问题发愁呢?恩,这要是因为这个东西-----百分比.他们可以听过设置百分比而不强制设定宽高的形式来适配,这样根据机型不同,他们的显示效果并不会有太大差异.然而,可惜的是,Android中并

一个公益水塘引发的纠纷

作者:英国<金融时报>中文网撰稿人 戚德志 我的高中同学老董在北京生活.工作了十多年后,今年年初决定辞职回山东老家搞生态农业.老董是缜密.慎重之人,为了避免无准备之仗,他投入了大量金钱.时间和精力在前期考察中. 上个礼拜,他到上海崇明考察,我们几个同学聚在一起,问他的感受.已经明显变黑的他,依然信心满满,但多了不少对现实问题的思考.其中最重要的一个思考,就是如何跟农民打交道.他在山东某县考察时候听说的一件事情,体现了农村问题典型的复杂性. 该县某村一位杨姓老板,在外面开电子厂发达了,想为父老乡