AcWing247亞特蘭蒂斯(線段樹 掃瞄線)

2022-06-08 18:51:10 字數 2606 閱讀 6067

題目位址

題目描述

有幾個古希臘書籍中包含了對傳說中的亞特蘭蒂斯島的描述。

其中一些甚至包括島嶼部分地圖。

但不幸的是,這些地圖描述了亞特蘭蒂斯的不同區域。

您的朋友bill必須知道地圖的總面積。

你自告奮勇寫了乙個計算這個總面積的程式。

輸入格式

輸入包含多組測試用例。

對於每組測試用例,第一行包含整數n,表示總的地圖數量。

接下來n行,描繪了每張地圖,每行包含四個數字x1,

y1,x

2,y2

'>x1,y1,x2,y2

(不一定是整數),(x1

,y1)

'>(x1,y1)和(x

2,y2

)'>(x2,y2)

分別是地圖的左上角位置和右下角位置。

注意,座標軸 x 軸從上向下延伸,y 軸從左向右延伸。

當輸入用例n=0時,表示輸入終止,該用例無需處理。

輸出格式

每組測試用例輸出兩行。

第一行輸出」test case #k」,其中k是測試用例的編號,從1開始。

第二行輸出「total explored area: a」,其中a是總地圖面積(即此測試用例中所有矩形的面積並,注意如果一片區域被多個地圖包含,則在計算總面積時只計算一次),精確到小數點後兩位數。

在每個測試用例後輸出乙個空行。

資料範圍1≤

n≤10000

'>1≤n≤100000≤

x1≤100000

'>0≤x1

y1≤100000

'>0≤y1

n≤10000

'>0≤x

1≤100000

'>0≤y

1≤100000

'>題解:這是一道掃瞄線+線段樹的問題。1≤

我們可以將矩形轉變為左邊+1,右邊-1的操作,每次只需要看看當前大於0的區間的長度再乘以寬度就是當前部分的面積,將所有的面積加起來就可以了

但是因為縱座標可以不是整數,所以如果直接線段樹的話不可以的,首先需要進行離散化處理,將所有的縱座標進行離散化。這個可以不使用pushdown(),首先pushdown()是在query()和modify()中使用,而我們所要查詢的直接tr[u].len就可以了。至於modify(),因為+1和減1是成對出現的,所以不必向下傳遞。

ac**

#includeusing
namespace

std;

const

int n=1e4+10

;struct

segmentseg[n*2

];struct

node tr[8*n];

vector

all;//

用於區間橫座標的離散化

int cmp(struct segment a1,struct

segment a2)

int find(double y)

void pushup(int u)

void build(int u,int l,int r)

int mid=l+r>>1

; build(u

<<1

,l,mid);

build(u

<<1|1,mid+1

,r);

return;}

void modify(int u,int l,int r,int d)

int mid=tr[u].l+tr[u].r>>1

;

if(l<=mid) modify(u<<1

,l,r,d);

if(r>mid) modify(u<<1|1

,l,r,d);

pushup(u);

return;}

intmain();

seg[j++]=;

all.push_back(y1),all.push_back(y2);

}sort(seg+1,seg+2*n+1

,cmp);

sort(all.begin(),all.end());

all.erase(unique(all.begin(),all.end()),all.end());

build(

1,1,all.size()-1

);

double ans=0

;

for(int i=1;i<=n*2;i++)

cout

<

test case #

"<

printf(

"total explored area: %.2lf\n\n

",ans);

}return0;

}寫於:202/8/29 12:34

Acwing247線段樹 掃瞄線

解題思路 這道題目的意思是想讓我們去計算由許多矩形組成的多邊形的總面積,並且給出的座標可是浮點型的 對於這樣有對稱的線段出現並需要所框住區域中的某種屬性的量,其實都是可以使用掃瞄線 但是還是得說應用的領域不大 但是在使用掃瞄線去計算其的面積的時候,需要去統計乙個邊的長度,這時候用線段樹就會顯得非常的...

2 4 7 揹包問題

7 揹包問題 問題描述 簡單的揹包問題。設有乙個揹包,可以放入的重量為s。現有n件物品,重量分別為w1,w2 wn,1 i n 均為正整數,從n件物品中挑選若干件,使得放入揹包的重量之和正好為s。找到一組解即可。輸入格式 第一行是物品總件數和揹包的載重量,第二行為各物品的重量。輸出格式 各所選物品重...

cogs247 售票系統

某次列車途經c個城市,城市編號依次為1到c,列車上共有s個座位,鐵路局規定售出的車票只能是坐票,即車上所有的旅客都有座。售票系統是由計算機執行的,每乙個售票申請包含三個引數,分別用o d n表示,o為起始站,d為目的地站,n為車票張數。售票 系統對該售票申請作出受理或不受理的決定,只有在從o到d的區...