Vijos 1165-火烧赤壁
描述
曹操平定北方以后,公元208年,率領大軍南下,進攻劉表。他的人馬還沒有到荊州,劉表已經病死。他的兒子劉琮聽到曹軍聲勢浩大,嚇破了膽,先派人求降了。
孫權任命周瑜為都督,撥給他三萬水軍,叫他同劉備協力抵抗曹操。
隆冬的十一月,天氣突然回暖,刮起了東南風。
沒想到東吳船隊離開北岸大約二里距離,前面十條大船突然同時起火?;鸾栾L勢,風助火威。十條火船,好比十條火龍一樣,闖進曹軍水寨。那里的船艦,都擠在一起,又躲不開,很快地都燒起來。一眨眼工夫,已經燒成一片火海。
曹操氣急敗壞的把你找來,要你鉆入火海把連環線上著火的船只的長度統計出來!
格式
輸入格式
第一行: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是一個點則看作沒有長度
來源
huyichen
.
.
.
.
.
分析
我們先定義兩個數組,記錄坐標,再全部賦給一個新的數組,進行排序,就可以判斷是否可用(bz判斷),再通過一個find函數,找到原位置,就可以算了。
然而本程序,在洛谷會被卡兩個點,要開O2才能過……
.
.
.
.
.
程序:
#include<iostream> #include<stdio.h> #include<algorithm> using namespace std; long c[40100]; int n,m; void read(long &x) {x=0; int f=1; char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1; ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}x*=f; }int find(long x) {for (int i=1;i<=m;i++)if (c[i]==x) return i; }int main() {long ans=0,a[20100],b[20100];bool bz[40100];cin>>n;for (int i=1;i<=n;i++){read(a[i]);read(b[i]);c[++m]=a[i];c[++m]=b[i]; }sort(c+1,c+m+1);for (int i=1;i<=n;i++){a[i]=find(a[i]);b[i]=find(b[i])-1;for (int j=a[i];j<=b[i];j++)bz[j]=true;}for (int i=1;i<=m;i++)if (bz[i]) ans+=c[i+1]-c[i];cout<<ans;return 0; }轉載于:https://www.cnblogs.com/YYC-0304/p/9499903.html
總結
以上是生活随笔為你收集整理的Vijos 1165-火烧赤壁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 3614-Sunscreen
- 下一篇: hihoCoder #1384 : Ge