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

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 閱讀(269) 評論(0)  編輯 收藏 引用 所屬分類: 線段樹
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美理论在线播放| 久久不射网站| 欧美日韩国产综合新一区| 亚洲精品乱码久久久久久久久| 久久综合给合| 免费观看成人鲁鲁鲁鲁鲁视频| 最新亚洲视频| 一区二区日韩免费看| 国产精品免费网站| 久久全国免费视频| 欧美高清在线视频| 亚洲男人的天堂在线aⅴ视频| 亚洲欧美综合一区| 亚洲国产婷婷香蕉久久久久久| 亚洲国产精品久久久久秋霞蜜臀| 欧美日韩综合另类| 久久久久国产精品午夜一区| 免费在线看成人av| 欧美亚洲尤物久久| 免费视频最近日韩| 午夜精品久久久久久99热| 久久婷婷久久| 午夜欧美不卡精品aaaaa| 裸体一区二区三区| 香蕉视频成人在线观看| 蜜桃av噜噜一区| 欧美一区二区三区视频免费| 蜜桃av一区| 久久精品夜色噜噜亚洲aⅴ| 欧美精品国产一区| 久久五月婷婷丁香社区| 欧美视频亚洲视频| 欧美激情精品久久久久久| 国产精品久久久久一区二区三区共| 久久这里有精品视频 | 六月天综合网| 国产精品免费一区豆花| 亚洲国产一区在线| 在线观看日韩国产| 亚洲欧美国产高清va在线播| 99精品免费| 久久综合九色综合久99| 久久精品国产77777蜜臀| 欧美日韩另类视频| 欧美国产欧美综合| 国内欧美视频一区二区| 亚洲一区www| 亚洲深夜福利| 欧美极品在线播放| 欧美成人综合| 亚洲二区精品| 久久久久久自在自线| 久久久国产91| 国产日韩专区| 亚洲欧美日韩视频一区| 亚洲一区二区三区四区五区午夜| 欧美成人精品| 亚洲国产精品一区制服丝袜| 悠悠资源网久久精品| 久久精品官网| 老牛影视一区二区三区| 黄色精品一区| 久久久亚洲精品一区二区三区 | 亚洲一区二区黄| 欧美日韩免费高清一区色橹橹| 亚洲激情偷拍| 99这里只有精品| 欧美理论在线播放| 夜夜嗨av一区二区三区网页| 亚洲视频免费观看| 国产精品成人一区二区| 亚洲永久精品大片| 欧美综合国产精品久久丁香| 国产日韩精品入口| 久久成人18免费网站| 免费在线亚洲| 亚洲剧情一区二区| 欧美日韩精品免费观看视频完整| 日韩一级黄色av| 午夜亚洲影视| 国产一区二区三区直播精品电影 | 久久不射中文字幕| 欧美激情成人在线| 亚洲神马久久| 国产日韩欧美不卡| 免费久久99精品国产自| 亚洲美女中文字幕| 久久精品视频免费播放| 亚洲国产日本| 国产精品视频一| 久久视频国产精品免费视频在线| 亚洲精品123区| 欧美一区二区国产| 最新国产成人av网站网址麻豆| 欧美日精品一区视频| 欧美一区二区三区日韩| 亚洲欧洲美洲综合色网| 欧美一区二区在线播放| 亚洲国产高清自拍| 欧美伦理在线观看| 新片速递亚洲合集欧美合集| 久久裸体艺术| 国产精品综合不卡av| 六月丁香综合| 在线中文字幕不卡| 久久精品亚洲热| 亚洲高清视频的网址| 欧美色图五月天| 久久免费视频网站| 一区二区免费在线播放| 欧美a级片一区| 亚洲免费在线视频| 影音先锋成人资源站| 国产精品爽爽ⅴa在线观看| 久久精品一二三| 亚洲美女诱惑| 欧美不卡一区| 99这里只有精品| 91久久国产自产拍夜夜嗨| 国产精品美女www爽爽爽| 麻豆精品传媒视频| 午夜国产精品影院在线观看| 亚洲国语精品自产拍在线观看| 久久一区精品| 性欧美1819性猛交| 亚洲伦理精品| 亚洲第一二三四五区| 国产伦精品一区二区三区照片91| 欧美色欧美亚洲另类二区| 久久久久久久综合狠狠综合| 99这里只有久久精品视频| 欧美国产高潮xxxx1819| 久久久久久久网| 一区二区三区偷拍| 99精品视频免费观看| 亚洲黄色一区| 红桃视频一区| 国产午夜亚洲精品羞羞网站| 欧美精品在线网站| 欧美精品系列| 欧美韩日视频| 欧美成人精品一区二区| 久久国产毛片| 亚洲欧美在线另类| 久久www成人_看片免费不卡| 亚洲一卡久久| 亚洲伊人色欲综合网| 中日韩美女免费视频网站在线观看| 男人的天堂亚洲| 亚洲国产裸拍裸体视频在线观看乱了 | 卡通动漫国产精品| 久久成人这里只有精品| 午夜精品一区二区三区电影天堂| 一区二区三区国产盗摄| 日韩亚洲国产欧美| 亚洲视频在线看| 午夜精品久久久久影视 | 亚洲欧美综合v| 欧美一区二区三区婷婷月色 | 在线高清一区| 亚洲第一区在线| 好看不卡的中文字幕| 国产一区二区三区丝袜| 国内精品久久久久久久97牛牛| 国产亚洲毛片在线| 黄色成人av在线| 国产在线视频不卡二| 亚洲精品免费在线观看| 亚洲美女黄色| 亚洲男人的天堂在线aⅴ视频| 亚洲无线一线二线三线区别av| 亚洲区在线播放| 亚洲欧美日韩综合aⅴ视频| 性高湖久久久久久久久| 久久久99爱| 欧美激情1区2区| 亚洲乱码国产乱码精品精天堂| 欧美一区二区视频97| 久色成人在线| 欧美日韩亚洲网| 国产亚洲欧洲一区高清在线观看| 国产亚洲综合性久久久影院| 亚洲日本成人网| 亚洲欧美视频一区二区三区| 久久视频在线视频| 亚洲欧洲日产国产网站| 一区二区久久| 欧美成人免费在线| 国产精品一区二区久久国产| 一区精品在线播放| 中文国产亚洲喷潮| 亚洲福利久久| 午夜精彩国产免费不卡不顿大片| 美女黄网久久| 国产免费一区二区三区香蕉精| 亚洲激情av| 久久av一区二区三区亚洲| 91久久线看在观草草青青| 欧美一区2区视频在线观看 | 久久久亚洲精品一区二区三区|