(Vij)火烧赤壁
描述
曹操平定北方以后,公元208年,率領大軍南下,進攻劉表。他的人馬還沒有到荊州,劉表已經病死。他的兒子劉琮聽到曹軍聲勢浩大,嚇破了膽,先派人求降了。
孫權任命周瑜為都督,撥給他三萬水軍,叫他同劉備協力抵抗曹操。
隆冬的十一月,天氣突然回暖,刮起了東南風。
沒想到東吳船隊離開北岸大約二里距離,前面十條大船突然同時起火。火借風勢,風助火威。十條火船,好比十條火龍一樣,闖進曹軍水寨。那里的船艦,都擠在一起,又躲不開,很快地都燒起來。一眨眼工夫,已經燒成一片火海。
曹操氣急敗壞的把你找來,要你鉆入火海把連環線上著火的船只的長度統計出來!
格式
輸入格式
第一行:N
以后N行,每行兩個數:Ai Bi(表示連環線上著火船只的起始位置和終點,-10^9<=Ai,Bi<=10^9)
輸出格式
輸出著火船只的總長度
樣例1
樣例輸入1
3
-1 1
5 11
2 9
Copy
樣例輸出1
11
Copy
提示
n<=20000
如果Ai=Bi是一個點則看作沒有長度
程序:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int n,a[20001],b[20001],c[40001]; int i,j,k,x,y,be,en; long long ass; bool f[40001]; bool cmp(int a,int b) {return a<b; } int fin(int l,int h,int x) {int mid=(l+h)/2;if (c[mid]<x) return fin(mid+1,h,x);if (c[mid]>x) return fin(l,mid,x);if (c[mid]==x) return mid; } int main() {scanf("%d",&n);for (i=1;i<=n;i++){scanf("%d%d",&a[i],&b[i]);j++;c[j]=a[i];j++;c[j]=b[i];}sort(c+1,c+j+1,cmp);for (i=1;i<=n;i++){x=fin(1,j,a[i]);y=fin(1,j,b[i]);for (k=x;k<y;k++)f[k]=1;}i=0;while (i<j){i++;if (f[i]){x=c[i];while (f[i]&&i<j) i++;y=c[i];ass+=y-x;}}printf("%lld",ass); }轉載于:https://www.cnblogs.com/YYC-0304/p/9500014.html
總結
- 上一篇: 神秘大三角(判断点与三角形的关系)
- 下一篇: (Vij)图形面积