洛谷P1496 火燒赤壁

2021-08-17 04:39:19 字數 1231 閱讀 4644

曹操平定北方以後,公元208年,率領大軍南下,進攻劉表。他的人馬還沒有到荊州,劉表已經病死。他的兒子劉琮聽到曹軍聲勢浩大,嚇破了膽,先派人求降了。

孫權任命周瑜為都督,撥給他三萬水軍,叫他同劉備協力抵抗曹操。

隆冬的十一月,天氣突然回暖,颳起了東南風。

沒想到東吳船隊離開北岸大約二里距離,前面十條大船突然同時**。火借風勢,風助火威。十條火船,好比十條火龍一樣,闖進曹軍水寨。那裡的船艦,都擠在一起,又躲不開,很快地都燒起來。一眨眼工夫,已經燒成一片火海。

曹操氣急敗壞的把你找來,要你鑽入火海把連環線上著火的船隻的長度統計出來!

輸入格式:

第一行:n

以後n行,每行兩個數:ai bi(表示連環線上著火船隻的起始位置和終點,-10^9<=ai,bi<=10^9)

輸出格式:

輸出著火船隻的總長度

輸入樣例#1:複製

3

-1 1

5 11

2 9

輸出樣例#1:複製

11

n<=20000

如果ai=bi是乙個點則看作沒有長度

本來是想找著離散化的題刷一下,然後就看到了這道,開啟一看發現是乙個簡單的模擬題。

開始看到這道題,隨手打了個排序然後算出來是13。

最後看了半天才發現,這個題面就是在坑人。

需要計算的並不是連著的船數,或者是說算的是「鎖鏈」數。

所以樣例裡,-1 1和2 9要分開來算。

清楚題意之後就很簡單了。

至於怎麼存數怎麼排序無需多講。

排完序後記錄下第乙個點的起始值start和結束值end作為判斷,然後從第二個點列舉到最後乙個點,每次檢視是否更新。

設當列舉到ai個點時,開始值為xi,結束值為yi。

如果xi如果xi>end,ans的值加上end-start,更新start為xi,end為yi。

最後輸出ans。

下面上**。

#include#include#includeusing namespace std;

struct hpq

h[23333];

bool cmp(const hpq &a,const hpq &b)

else

}sum+=y-x;

cout

}

洛谷 P1496 火燒赤壁

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

洛谷 P1496 火燒赤壁

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

P1496 火燒赤壁

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