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

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>
            国产亚洲精品高潮| 国产精品va在线| 国产欧美日韩| 亚洲一区国产精品| 久久国产综合精品| 亚洲视屏一区| 欧美日韩综合网| 一区二区免费在线视频| 亚洲国产精品va在线看黑人| 欧美一区二区视频在线观看2020| 欧美粗暴jizz性欧美20| 亚洲国产一区二区三区青草影视| 久久综合九色九九| 久久综合成人精品亚洲另类欧美| 激情av一区| 亚洲国产cao| 欧美日韩精品免费看| 一本久久综合亚洲鲁鲁| 亚洲国产免费| 欧美日韩在线三区| 亚洲你懂的在线视频| 亚洲亚洲精品在线观看| 国产毛片精品视频| 久久在线精品| 欧美激情视频免费观看| 亚洲黄色影片| 99精品欧美一区| 国产日韩欧美在线| 美腿丝袜亚洲色图| 欧美日本亚洲| 久久国产精品亚洲77777| 久久婷婷一区| 亚洲桃色在线一区| 亚洲视频在线观看一区| 国产亚洲精品自拍| 亚洲国产精品va在线看黑人| 欧美三级午夜理伦三级中视频| 欧美一级播放| 美女精品国产| 香蕉久久一区二区不卡无毒影院| 亚洲网站啪啪| 亚洲高清一区二| 亚洲视屏在线播放| 在线免费观看日本欧美| 亚洲精品系列| 激情av一区二区| 欧美福利视频在线观看| 国产精品极品美女粉嫩高清在线| 久久久夜色精品亚洲| 欧美成人在线影院| 亚洲视频久久| 久久综合久久88| 欧美中文字幕视频| 欧美交受高潮1| 狂野欧美激情性xxxx欧美| 欧美国产综合一区二区| 性高湖久久久久久久久| 欧美精品国产精品| 欧美jjzz| 国产性猛交xxxx免费看久久| 亚洲久久成人| 91久久国产综合久久蜜月精品| 一本色道久久88精品综合| 亚洲国产综合在线看不卡| 午夜在线电影亚洲一区| 亚洲一区国产一区| 欧美激情亚洲激情| 欧美粗暴jizz性欧美20| 一区二区三区在线视频免费观看| 亚洲手机视频| 亚洲一区国产视频| 欧美另类高清视频在线| 亚洲国产精品ⅴa在线观看| 国产一区二区福利| 午夜精品福利在线观看| 亚欧成人精品| 欧美成人网在线| 欧美国产一区在线| 亚洲高清电影| 欧美a级理论片| 欧美风情在线| 亚洲三级色网| 欧美jizz19hd性欧美| 欧美激情精品久久久| 亚洲福利一区| 欧美成人精品一区二区| 久久精品在线免费观看| 国产精品亚发布| 亚洲你懂的在线视频| 午夜欧美理论片| 国产日本亚洲高清| 欧美在线不卡视频| 蜜臀a∨国产成人精品| 在线精品高清中文字幕| 久久综合精品一区| 亚洲国产精品激情在线观看| 亚洲欧洲日韩综合二区| 久久永久免费| 亚洲日本免费电影| 亚洲视频每日更新| 国产欧美日韩三级| 久久精品色图| 亚洲国产精品久久久久秋霞影院| 国产亚洲福利| 免费在线观看成人av| 亚洲片区在线| 亚洲欧美视频| 亚洲精品小视频在线观看| 国产精品亚洲成人| 欧美高清不卡| 久久精品国产欧美亚洲人人爽| 亚洲激情在线| 久久久久久久网| 亚洲在线1234| 亚洲黄色成人| 国一区二区在线观看| 欧美日韩一区二区免费视频| 久久久www| 亚洲欧美日韩国产| 亚洲美女毛片| 欧美大学生性色视频| 久久久精品国产免大香伊| 在线视频欧美一区| 亚洲日本中文| 悠悠资源网亚洲青| 国产婷婷一区二区| 欧美三级视频在线| 欧美电影免费| 老**午夜毛片一区二区三区| 欧美一区二区观看视频| 在线性视频日韩欧美| 亚洲片在线观看| 亚洲高清色综合| 女仆av观看一区| 免费看黄裸体一级大秀欧美| 久久久噜噜噜久久| 欧美在线视频不卡| 欧美一区二区三区免费视| 亚洲综合色激情五月| 亚洲制服丝袜在线| 亚洲综合欧美日韩| 亚洲免费人成在线视频观看| 一本色道久久精品| 在线亚洲精品| 在线视频精品| 亚洲深夜福利在线| 亚洲一区三区电影在线观看| 中文一区字幕| 午夜电影亚洲| 久久国产精品一区二区三区| 久久精品首页| 久久尤物视频| 亚洲第一福利社区| 亚洲啪啪91| 一区二区久久| 亚洲欧美电影院| 久久激五月天综合精品| 久久久久久久久伊人| 欧美成人一区二区在线 | 欧美专区中文字幕| 久久国产精品色婷婷| 另类天堂视频在线观看| 欧美国产日韩一区二区| 亚洲激情第一页| 中文在线一区| 欧美在线视频二区| 欧美freesex8一10精品| 欧美午夜精品一区| 国产一区二区三区精品久久久| 国内揄拍国内精品久久| 亚洲精品永久免费| 亚洲专区一二三| 狼狼综合久久久久综合网| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲视频在线看| 欧美在线三区| 欧美激情精品久久久久久久变态 | 亚洲最新视频在线播放| 午夜精品福利视频| 欧美成人在线网站| 国产免费观看久久| 亚洲麻豆一区| 久久久国产精品一区二区中文 | 一本色道久久88综合亚洲精品ⅰ| 午夜精品www| 欧美激情综合网| 国产自产2019最新不卡| 亚洲伦理精品| 久久婷婷人人澡人人喊人人爽| 亚洲精品一二三区| 久久久久9999亚洲精品| 欧美三级视频在线| 亚洲国产成人高清精品| 性欧美暴力猛交另类hd| 亚洲精品久久久久中文字幕欢迎你| 欧美一级午夜免费电影| 欧美另类高清视频在线| 亚洲福利一区| 另类图片国产|