題解 P1496 火燒赤壁

2022-07-22 06:39:08 字數 1094 閱讀 4230

蒟蒻的第一篇題解,其實這道題是標準的離散化,模擬可以過,但是就沒有訓練效果了。我們首先先看資料,n<=20000,資料不多,但是範圍大(-10^9<=ai,bi<=10^9),這時,就可以用離散化了,我們先定義兩個陣列,記錄座標,再全部賦給乙個新的陣列,進行排序,就可以判斷是否可用*(flag判斷),再通過乙個find函式,找到原位置,就可以算了。但是本題卡時間,優化一下就行(快讀,氧氣優化之類的)

關於判斷是否可用,舉個栗子

有兩對線段(x1,y1)(x2,y2) 如果x1>y2或x2>y1,那麼(y2,x1)段或(y1,x2)段無用

1

#pragma gcc optimize(2)//

手動o2

2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8long n,m=1,ans=0;//

m記錄座標數

9long c[40100]=;

10//

因為c要把起點與終點存下來,所以開40100

11int a[20100],b[20100];//

a存起點,b存終點

12bool flag[40100];//

判斷是否有效

13 inline void read(long &x)//

快讀14

24while(ch>='

0'&&ch<='9'

)2529 x*=f;30}

31 inline long find(long key)//

找原來位置

3238}39

intmain()

40//

把a,b存入c陣列裡去

51 sort(c+1,c+m+1);//

排序座標

52for(long i=1;i<=n;++i)

5359

for(long i=1;i<=m;++i)

6064 printf("

%ld"

,ans);

65 }

蒟蒻瑟瑟發抖,%%各位大佬

P1496 火燒赤壁

用離散化,區間問題。當然,可以用模擬,但是資料強一點,模擬就不過了!1.用陣列x儲存所有起點和終點。2.對x進行公升序排序。3.用unique 對x進行去重。4.進行標記,遍歷所有的起點和終點,找它們在離散陣列x中排在第幾位。技巧 add陣列,標記了離散陣列x,用於區別起點和終點。並用於標記區間是否...

洛谷 P1496 火燒赤壁

題目描述 曹操平定北方以後,公元208年,率領大軍南下,進攻劉表。他的人馬還沒有到荊州,劉表已經病死。他的兒子劉琮聽到曹軍聲勢浩大,嚇破了膽,先派人求降了。孫權任命周瑜為都督,撥給他三萬水軍,叫他同劉備協力抵抗曹操。隆冬的十一月,天氣突然回暖,颳起了東南風。沒想到東吳船隊離開北岸大約二里距離,前面十...

洛谷P1496 火燒赤壁

曹操平定北方以後,公元208年,率領大軍南下,進攻劉表。他的人馬還沒有到荊州,劉表已經病死。他的兒子劉琮聽到曹軍聲勢浩大,嚇破了膽,先派人求降了。孫權任命周瑜為都督,撥給他三萬水軍,叫他同劉備協力抵抗曹操。隆冬的十一月,天氣突然回暖,颳起了東南風。沒想到東吳船隊離開北岸大約二里距離,前面十條大船突然...