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

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個矩形的2n個坐標,求矩形的覆蓋面積。如果開一個大的bool數組,將覆蓋過的部分更新為true,再從頭到尾掃描一遍,在坐標范圍比較小的情況下,可以求解。但是如果坐標x,y的取值范圍很大,比如[-10^8,10^8],用上面這個方法就不能求解了;而且坐標還有可能是實數,上面的方法就更加不可行了,需要尋找一種新的解法,就是下面要說到的“離散化”。
    注意到要表示一個矩形,只需要知道其2個頂點的坐標就可以了(最左下,最右上)。可以用2個數組x[0...2n-1],y[0...2n-1]記錄下矩形Ri的2個坐標(x1,y1),(x2,y2),然后將數組x[0...xn-1],y[0...2n-1]排序,為下一步的掃描線作準備,這就是離散化的思想。這題還可以用線段樹做進一步優化,但是這里只介紹離散化的思想。
    看下面這個例子:有2個矩形(1,1),(3,3)和(2,2),(4,4)。如圖:
    圖中虛線表示掃描線,下一步工作只需要將這2個矩形覆蓋過的部分的bool數組的對應位置更新為true,接下去用掃描線從左到右,從上到下掃描一遍,就可以求出矩形覆蓋的總面積。
    這個圖對應的bool數組的值如下:
    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;//線段樹的左右整點
    int c;//c用來記錄重疊情況
    double cnt, lf, rf;//
    
//cnt用來計算實在的長度,rf,lf分別是對應的左右真實的浮點數端點
} segTree[MAXN * 3];
struct Line
{
    
double x, y1, y2;
    
int f;
} line[MAXN];
//把一段段平行于y軸的線段表示成數組 ,
//x是線段的x坐標,y1,y2線段對應的下端點和上端點的坐標
//一個矩形 ,左邊的那條邊f為1,右邊的為-1,
//用來記錄重疊情況,可以根據這個來計算,nod節點中的c

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

double y[MAXN];//記錄y坐標的數組
void Build(int t,int l,int r)//構造線段樹
{
    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);//遞歸構造
}
void calen(int t)//計算長度
{
    
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 閱讀(278) 評論(0)  編輯 收藏 引用 所屬分類: 線段樹

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            在线精品视频在线观看高清| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美在线亚洲综合一区| 亚洲黄色一区二区三区| 亚洲自拍另类| 99综合精品| 免费精品视频| 久久五月婷婷丁香社区| 国产精品一区在线观看| 亚洲精品中文字幕在线观看| 在线观看视频免费一区二区三区| 亚洲免费中文| 亚洲一区日韩在线| 欧美精品久久一区二区| 欧美二区在线播放| 国产一区深夜福利| 午夜国产精品视频| 香蕉久久久久久久av网站| 欧美日韩三级视频| 亚洲精品影视| 亚洲视频在线一区| 欧美日韩免费在线观看| 亚洲精品免费观看| 亚洲免费电影在线| 欧美国产第二页| 亚洲国产日韩欧美在线图片| 亚洲激情偷拍| 欧美大片在线观看一区二区| 欧美丰满少妇xxxbbb| 狠狠做深爱婷婷久久综合一区 | 欧美精品久久久久久久免费观看 | 欧美激情一区二区三区在线视频 | 黑人极品videos精品欧美裸| 欧美在线免费看| 久久久久久久久久久一区| 国产一区二区在线观看免费播放| 午夜亚洲一区| 老司机aⅴ在线精品导航| 国产在线欧美| 久久综合网hezyo| 亚洲国产精品成人综合| 亚洲伦理中文字幕| 欧美网站在线观看| 亚洲一区三区电影在线观看| 久久国产精品久久久| 国产午夜精品理论片a级大结局| 欧美亚洲视频在线观看| 另类亚洲自拍| 99re6这里只有精品| 欧美性猛交xxxx乱大交蜜桃| 午夜精品福利电影| 免费国产一区二区| 亚洲最新中文字幕| 国产精品一区二区你懂的| 久久久www免费人成黑人精品 | 欧美成人午夜激情| 一区二区冒白浆视频| 国产精品日韩二区| 老司机免费视频一区二区三区| 亚洲欧洲在线一区| 欧美在线观看视频一区二区三区| 1024欧美极品| 欧美日韩欧美一区二区| 午夜一区二区三区在线观看| 欧美韩日精品| 欧美亚洲三区| 亚洲精品美女久久7777777| 国产精品久久久久久久久免费桃花| 欧美一区午夜精品| 99re热这里只有精品免费视频| 久久精品首页| 亚洲午夜性刺激影院| 伊人久久婷婷色综合98网| 欧美视频福利| 久久青草久久| 亚洲欧美日韩视频一区| 亚洲欧洲日产国产综合网| 亚洲欧美影音先锋| 亚洲国产视频一区| 国产欧美一区二区白浆黑人| 欧美精品一区二区精品网| 亚洲综合大片69999| 亚洲区国产区| 免费观看国产成人| 亚洲欧美在线一区二区| 亚洲国产免费看| 国内精品久久久久久影视8| 欧美视频在线观看免费网址| 免费观看国产成人| 久久久久久久久岛国免费| 亚洲欧美国产一区二区三区| 亚洲精品影视| 欧美二区在线| 欧美国产高清| 美日韩精品视频免费看| 久久久久久久综合日本| 午夜一区二区三视频在线观看 | 亚洲图片你懂的| 最新国产の精品合集bt伙计| 黄色影院成人| 国产日韩欧美精品在线| 欧美午夜精品久久久久久人妖 | 免费观看日韩av| 久久手机免费观看| 欧美一区亚洲| 欧美在线日韩精品| 午夜精品久久久久久久白皮肤| 洋洋av久久久久久久一区| 最新亚洲一区| 日韩一级在线观看| 99国内精品久久| 日韩午夜精品| 中文久久精品| 亚洲欧美激情诱惑| 性久久久久久久久| 午夜精品久久久久久久白皮肤| 午夜国产精品影院在线观看 | 亚洲一区二区三区激情| 亚洲婷婷免费| 亚洲欧美在线免费| 欧美在线影院在线视频| 久久精品最新地址| 老司机免费视频一区二区| 欧美阿v一级看视频| 欧美日本国产| 欧美视频日韩视频在线观看| 国产精品嫩草99av在线| 欧美三级网页| 国产伦精品一区二区三区四区免费| 国产日韩精品在线播放| 国产亚洲综合在线| 亚洲国产成人av在线| 野花国产精品入口| 午夜欧美理论片| 免费观看日韩| 日韩午夜电影| 性欧美暴力猛交另类hd| 久久一区二区三区四区| 欧美精品在线一区二区| 欧美午夜宅男影院在线观看| 国产日韩欧美在线播放| 亚洲激情婷婷| 亚洲欧美日韩专区| 美女成人午夜| 9国产精品视频| 久久精品一区二区国产| 欧美人妖在线观看| 国产一区深夜福利| 亚洲精品偷拍| 久久久久久久国产| 亚洲国产欧美一区二区三区久久| 亚洲一区二区欧美| 久久综合精品一区| 国产精品嫩草久久久久| 亚洲国内自拍| 欧美主播一区二区三区美女 久久精品人| 免费av成人在线| 一区二区三区免费看| 老牛嫩草一区二区三区日本 | 国产日本亚洲高清| 亚洲精品免费一区二区三区| 欧美在线免费观看| 亚洲精品永久免费精品| 久久国产精品亚洲77777| 欧美人与性禽动交情品| 一区二区三区在线观看欧美| 亚洲欧美国产毛片在线| 欧美激情一区二区三区高清视频| 午夜精品久久久久久久99水蜜桃| 欧美电影在线观看| 狠狠色狠狠色综合日日小说| 午夜视频一区| 亚洲黄色在线看| 久久免费少妇高潮久久精品99| 国产精品午夜春色av| 一区二区三区波多野结衣在线观看| 麻豆精品国产91久久久久久| 午夜在线视频一区二区区别| 欧美午夜电影完整版| 亚洲毛片在线看| 欧美粗暴jizz性欧美20| 久久久精品国产免大香伊| 国产农村妇女精品一区二区| 亚洲男人的天堂在线aⅴ视频| 亚洲精品美女在线观看播放| 免费不卡欧美自拍视频| 在线日韩精品视频| 久久久久久9999| 小辣椒精品导航| 国产欧美日韩精品丝袜高跟鞋| 亚洲欧美日韩国产另类专区| 一本色道婷婷久久欧美| 欧美日韩一区二区视频在线观看| 日韩一级在线观看| 亚洲精品欧美日韩| 欧美日韩国产影院| 一本色道久久综合亚洲精品不卡| 亚洲国产片色| 欧美日韩精品免费看| 一本色道久久综合亚洲精品高清|