2774 火燒赤壁
連結:http://codevs.cn/problem/2774/
時間限制: 1 s
空間限制: 16000 KB
題目描述 Description
曹操平定北方以後,公元208年,率領大軍南下,進攻劉表。他的人馬還沒有到荊州,劉表已經病死。他的兒子劉琮聽到曹軍聲勢浩大,嚇破了膽,先派人求降了。
孫權任命周瑜為都督,撥給他三萬水軍,叫他同劉備協力抵抗曹操。
隆冬的十一月,天氣突然回暖,颳起了東南風。
沒想到東吳船隊離開北岸大約二里距離,前面十條大船突然同時起火。火借風勢,風助火威。十條火船,好比十條火龍一樣,闖進曹軍水寨。那裡的船艦,都擠在一起,又躲不開,很快地都燒起來。一眨眼工夫,已經燒成一片火海。
曹操氣急敗壞的把你找來,要你鑽入火海把連環線上著火的船隻的長度統計出來!
輸入描述 Input Description
第一行:N
以後N行,每行兩個數:Ai Bi(表示連環線上著火船隻的起始位置和終點,-10^9<=Ai,Bi<=10^9)
輸出描述 Output Description
輸出著火船隻的總長度
樣例輸入 Sample Input
3
-1 1
5 11
2 9
樣例輸出 Sample Output
11
資料範圍及提示 Data Size & Hint
n<=20000
如果Ai=Bi是一個點則看作沒有長度
題解:先排大小,上一個的終點和下一個起點之間的距離除去。注意:如果用陣列下標記錄,會棧溢位
#include<bits/stdc++.h> using namespace std; const int maxn=20005; int a[maxn],b[maxn]; int main(){ int N,cnt=0,t=0; cin>>N; for(int i=1;i<=N;i++)cin>>a[i]>>b[i]; sort(a+1,a+1+N); sort(b+1,b+1+N); int m=b[N]-a[1]; for(int i=2;i<=N;i++) if(a[i]>b[i-1])m-=a[i]-b[i-1]; cout<<m<<endl; }