青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 7,comments - 3,trackbacks - 0

 1043: Atlantis


ResultTIME LimitMEMORY LimitRun TimesAC TimesJUDGE
3s8192K431155Standard

There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these maps describe different regions of Atlantis. Your friend Bill has to know the total area for which maps exist. You (unwisely) volunteered to write a program that calculates this quantity.

Input

The input file consists of several test cases. Each test case starts with a line containing a single integer n(1 < n < 100) of available maps. The n following lines describe one map each. Each of these lines containsfour numbers x1;y1;x2;y2 (0 < x1 < x2 < 100000;0 < y1 < y2 < 100000), not necessarily integers. The values (x1; y1) and (x2;y2) are the coordinates of the top-left resp. bottom-right corner of the mapped area.The input file is terminated by a line containing a single 0. Don’t process it1.

Output

For each test case, your program should output one section. The first line of each section must be “Testcase #k”, where k is the number of the test case (starting with 1). The second one must be   “Total explored area: a”, where a is the total explored area (i.e. the area of the union of all rectangles in this test case), printed exact to two digits to the right of the decimal point.

Output a blank line after each test case.

Sample Input

2
10 10 20 20
15 15 25 25.5
0

Sample Output

Test case #1
Total explored area: 180.00


題目的意思是給定n個(gè)矩形的2n個(gè)坐標(biāo),求矩形的覆蓋面積。如果開一個(gè)大的bool數(shù)組,將覆蓋過的部分更新為true,再從頭到尾掃描一遍,在坐標(biāo)范圍比較小的情況下,可以求解。但是如果坐標(biāo)x,y的取值范圍很大,比如[-10^8,10^8],用上面這個(gè)方法就不能求解了;而且坐標(biāo)還有可能是實(shí)數(shù),上面的方法就更加不可行了,需要尋找一種新的解法,就是下面要說到的“離散化”。
    注意到要表示一個(gè)矩形,只需要知道其2個(gè)頂點(diǎn)的坐標(biāo)就可以了(最左下,最右上)。可以用2個(gè)數(shù)組x[0...2n-1],y[0...2n-1]記錄下矩形Ri的2個(gè)坐標(biāo)(x1,y1),(x2,y2),然后將數(shù)組x[0...xn-1],y[0...2n-1]排序,為下一步的掃描線作準(zhǔn)備,這就是離散化的思想。這題還可以用線段樹做進(jìn)一步優(yōu)化,但是這里只介紹離散化的思想。
    看下面這個(gè)例子:有2個(gè)矩形(1,1),(3,3)和(2,2),(4,4)。如圖:
    圖中虛線表示掃描線,下一步工作只需要將這2個(gè)矩形覆蓋過的部分的bool數(shù)組的對(duì)應(yīng)位置更新為true,接下去用掃描線從左到右,從上到下掃描一遍,就可以求出矩形覆蓋的總面積。
    這個(gè)圖對(duì)應(yīng)的bool數(shù)組的值如下:
    1 1 0                       1 2 3
    1 1 1       <---->       4 5 6
    0 1 1                       7 8 9

代碼:

#include<stdio.h>
#include
<iostream>
#include
<algorithm>
#define MAXN 201
using namespace std;

struct Node
{
    
int l, r;//線段樹的左右整點(diǎn)
    int c;//c用來記錄重疊情況
    double cnt, lf, rf;//
    
//cnt用來計(jì)算實(shí)在的長(zhǎng)度,rf,lf分別是對(duì)應(yīng)的左右真實(shí)的浮點(diǎn)數(shù)端點(diǎn)
} segTree[MAXN * 3];
struct Line
{
    
double x, y1, y2;
    
int f;
} line[MAXN];
//把一段段平行于y軸的線段表示成數(shù)組 ,
//x是線段的x坐標(biāo),y1,y2線段對(duì)應(yīng)的下端點(diǎn)和上端點(diǎn)的坐標(biāo)
//一個(gè)矩形 ,左邊的那條邊f(xié)為1,右邊的為-1,
//用來記錄重疊情況,可以根據(jù)這個(gè)來計(jì)算,nod節(jié)點(diǎn)中的c

bool cmp(Line a,Line b)//sort排序的函數(shù)
{
    
return a.x < b.x;
}

double y[MAXN];//記錄y坐標(biāo)的數(shù)組
void Build(int t,int l,int r)//構(gòu)造線段樹
{
    segTree[t].l 
= l;
    segTree[t].r 
= r;
    segTree[t].cnt 
= segTree[t].c = 0;
    segTree[t].lf 
= y[l];
    segTree[t].rf 
= y[r];
    
if (l + 1 == r) return;
    
int mid = (l + r) >> 1;
    Build(t 
<< 1, l, mid);
    Build(t 
<< 1 | 1, mid, r);//遞歸構(gòu)造
}
void calen(int t)//計(jì)算長(zhǎng)度
{
    
if (segTree[t].c > 0)
    {
        segTree[t].cnt 
= segTree[t].rf - segTree[t].lf;
        
return;
    }
    
if (segTree[t].l + 1 == segTree[t].r)
        segTree[t].cnt 
= 0;
    
else
        segTree[t].cnt 
= segTree[t << 1].cnt + segTree[t << 1 | 1].cnt;
}
void update(int t, Line e)//加入線段e,后更新線段樹
{
    
if (e.y1 == segTree[t].lf && e.y2 == segTree[t].rf)
    {
        segTree[t].c 
+= e.f;
        calen(t);
        
return;
    }
    
if (e.y2 <= segTree[t << 1].rf)
        update(t 
<< 1, e);
    
else
    
if(e.y1 >= segTree[t << 1 | 1].lf)
        update(t 
<< 1 | 1, e);
    
else
    {
        Line tmp 
= e;
        tmp.y2 
= segTree[t << 1].rf;
        update(t 
<< 1, tmp);
        tmp 
= e;
        tmp.y1 
= segTree[t << 1 | 1].lf;
        update(t 
<< 1 | 1, tmp);
    }
    calen(t);
}
int main()
{
    
int i, n, t, iCase = 0;
    
double x1, y1, x2, y2;
    
while(scanf("%d"&n) && n)
    {
        iCase
++;
        t 
= 1;
        
for(i = 1; i <= n; i++)
        {
            scanf(
"%lf%lf%lf%lf"&x1, &y1, &x2, &y2);
            line[t].x 
= x1;
            line[t].y1 
= y1;
            line[t].y2 
= y2;
            line[t].f 
= 1;
            y[t] 
= y1;
            t
++;
            line[t].x 
= x2;
            line[t].y1 
= y1;
            line[t].y2 
= y2;
            line[t].f 
= -1;
            y[t] 
= y2;
            t
++;
        }
        sort(line 
+ 1, line + t, cmp);
        sort(y 
+ 1, y + t);
        Build(
11, t - 1);
        update(
1, line[1]);
        
double res = 0;
        
for(i = 2; i < t; i++)
        {
            res 
+= segTree[1].cnt * (line[i].x - line[i - 1].x);
            update(
1, line[i]);
        }
        printf(
"Test case #%d\n", iCase);
        printf(
"Total explored area: %.2lf\n\n", res);
    }
    
return 0;
}
posted on 2011-10-25 23:52 LLawliet 閱讀(277) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 線段樹

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产一区视频在线观看| 激情综合视频| 久久伊人精品天天| 欧美日韩一区二区在线观看视频| 久久久久久一区二区三区| 欧美日产国产成人免费图片| 毛片一区二区| 国产亚洲精品aa午夜观看| 亚洲视频精选| 这里只有精品在线播放| 欧美大胆人体视频| 亚洲电影av在线| 国产视频观看一区| 亚洲婷婷综合色高清在线| 一区二区日韩精品| 欧美日韩国产成人| 亚洲区一区二| 在线亚洲欧美视频| 欧美日韩国产精品一区二区亚洲| 欧美大片免费观看| 在线免费不卡视频| 蜜臀a∨国产成人精品| 欧美1级日本1级| 亚洲激情视频在线| 欧美ed2k| 亚洲伦伦在线| 亚洲一区二区三区中文字幕| 欧美日韩亚洲在线| 亚洲深夜激情| 欧美一区日韩一区| 国产日韩精品综合网站| 欧美一区二区三区免费看| 欧美中日韩免费视频| 国产亚洲精品一区二555| 亚洲欧美日韩另类| 蘑菇福利视频一区播放| 亚洲国产精品成人综合色在线婷婷| 久久天堂国产精品| 亚洲国产高清aⅴ视频| 亚洲精品一区在线| 欧美无乱码久久久免费午夜一区| 在线视频亚洲| 久久久噜噜噜久久狠狠50岁| 黄色成人av在线| 欧美成人网在线| 亚洲视频香蕉人妖| 久久亚洲精品伦理| 日韩视频三区| 国产精品视频成人| 久久天堂av综合合色| 亚洲人体1000| 久久国产天堂福利天堂| 亚洲第一在线| 欧美视频一区二区在线观看| 欧美一区午夜视频在线观看| 欧美高清视频在线| 午夜精品成人在线| 亚洲激情网址| 国产酒店精品激情| 六月婷婷久久| 亚洲女与黑人做爰| 亚洲国产成人av| 欧美在线观看一区二区| 91久久精品美女高潮| 国产精品视频久久一区| 久久久www成人免费精品| 一区二区三区日韩在线观看| 免费亚洲婷婷| 亚洲综合电影| 91久久精品国产91久久性色tv| 国产精品视频最多的网站| 美女图片一区二区| 午夜精品久久久久| 亚洲精品中文字| 蜜桃伊人久久| 欧美在线3区| 亚洲午夜在线视频| 最新国产乱人伦偷精品免费网站 | 免费欧美电影| 亚洲欧美成人精品| 99综合电影在线视频| 欧美xx69| 久久影视精品| 欧美一级夜夜爽| 一区二区三区视频免费在线观看| 亚洲国产精品久久久久秋霞蜜臀| 国产日韩精品久久久| 欧美视频在线观看| 欧美1区2区| 久久欧美肥婆一二区| 久久成人一区| 午夜视频一区在线观看| 亚洲婷婷综合久久一本伊一区| 亚洲欧洲美洲综合色网| 欧美激情视频一区二区三区免费| 久久久久久香蕉网| 久久超碰97中文字幕| 午夜精品久久久久久99热| 亚洲香蕉在线观看| 99精品久久免费看蜜臀剧情介绍| 亚洲国产婷婷香蕉久久久久久| 激情综合网激情| 极品av少妇一区二区| 国产在线精品成人一区二区三区 | 午夜精品影院| 亚洲午夜激情网页| 一区二区三区黄色| 亚洲一区在线播放| 亚洲网站视频福利| 夜夜爽99久久国产综合精品女不卡| 亚洲国产成人在线| 亚洲精品三级| 日韩视频在线一区二区| 日韩午夜电影| 亚洲一区二区免费看| 亚洲欧美日韩国产另类专区| 亚洲欧美日韩中文在线制服| 欧美一级一区| 久久久精品网| 欧美福利视频一区| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产主播一区二区| 一区二区亚洲精品| 亚洲人成在线观看| 一片黄亚洲嫩模| 性做久久久久久久久| 久久成人亚洲| 鲁大师成人一区二区三区| 欧美大香线蕉线伊人久久国产精品| 老鸭窝亚洲一区二区三区| 亚洲黄一区二区三区| 中国成人亚色综合网站| 欧美在线视频二区| 免费观看在线综合| 欧美日韩国产亚洲一区| 国产女主播视频一区二区| 精品二区视频| 亚洲无线视频| 久久综合电影| 亚洲免费成人av电影| 亚洲男人的天堂在线| 麻豆精品传媒视频| 国产精品国产自产拍高清av| 狠狠色香婷婷久久亚洲精品| 一本久久知道综合久久| 久久精品综合| 日韩亚洲精品电影| 欧美诱惑福利视频| 欧美日韩成人综合在线一区二区 | 欧美视频一区在线| 伊大人香蕉综合8在线视| 在线亚洲一区二区| 久久视频在线看| 一本色道久久综合亚洲91| 久久精品女人的天堂av| 欧美日韩理论| 在线观看视频一区二区| 先锋影音久久| 亚洲靠逼com| 久久这里有精品15一区二区三区| 国产精品九九| 日韩一级黄色av| 美女黄毛**国产精品啪啪| 亚洲婷婷国产精品电影人久久| 女仆av观看一区| 黑人一区二区| 欧美一区2区视频在线观看| 亚洲福利电影| 久久久欧美一区二区| 国产精品一区二区女厕厕| 夜夜嗨av一区二区三区四季av| 免费在线看一区| 欧美一区网站| 国产农村妇女毛片精品久久麻豆| 一区二区电影免费在线观看| 免费观看一区| 久久大逼视频| 国内精品久久久久久久影视麻豆| 亚洲一区免费| 日韩午夜av电影| 欧美日产在线观看| 亚洲另类春色国产| 欧美福利在线观看| 久久这里有精品视频| 一色屋精品视频在线看| 久久亚洲春色中文字幕| 亚洲欧美视频一区二区三区| 国产精品久久久久久久久久直播| 在线综合亚洲欧美在线视频| 亚洲人成在线免费观看| 欧美福利一区二区| 亚洲美女在线视频| 亚洲精品四区| 欧美日韩免费观看一区| 夜夜嗨av一区二区三区网站四季av | 国产精品日本一区二区| 亚洲一区亚洲二区| 亚洲午夜免费福利视频| 国产欧美二区| 久久久久久国产精品mv|