1165 火烧赤壁 vijosoj (数组模拟)

来源:互联网 发布:java模拟器安卓4.4.2版 编辑:程序博客网 时间:2024/04/19 09:23
1165火烧赤壁
Accept

描述

曹操平定北方以后,公元208年,率领大军南下,进攻刘表。他的人马还没有到荆州,刘表已经病死。他的儿子刘琮听到曹军声势浩大,吓破了胆,先派人求降了。

孙权任命周瑜为都督,拨给他三万水军,叫他同刘备协力抵抗曹操。

隆冬的十一月,天气突然回暖,刮起了东南风。

没想到东吴船队离开北岸大约二里距离,前面十条大船突然同时起火。火借风势,风助火威。十条火船,好比十条火龙一样,闯进曹军水寨。那里的船舰,都挤在一起,又躲不开,很快地都烧起来。一眨眼工夫,已经烧成一片火海。

曹操气急败坏的把你找来,要你钻入火海把连环线上着火的船只的长度统计出来!

格式

输入格式

第一行:N
以后N行,每行两个数:Ai  Bi(表示连环线上着火船只的起始位置和终点,-10^9<=Ai,Bi<=10^9)

输出格式

输出着火船只的总长度

样例1

样例输入1[复制]

3-1 15 112 9

样例输出1[复制]

11

提示

n<=20000
如果Ai=Bi是一个点则看作没有长度

 

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct zz{int a,b;}q[50010];int cmp(zz x,zz y){if(x.a!=y.a)return x.a<y.a;return x.b<y.b;}int main(){int n;int i,j,k;long long int sum;int s,e;while(scanf("%d",&n)!=EOF){sum=0;for(i=0;i<n;i++)scanf("%d%d",&q[i].a,&q[i].b);sort(q,q+n,cmp);for(i=1;i<n;i++){if(q[i].a<q[i-1].b&&q[i].b>q[i-1].b)q[i].a=q[i-1].b;else if(q[i].a<q[i-1].b&&q[i].b<=q[i-1].b){q[i].a=q[i-1].b;q[i].b=q[i-1].b;}}for(i=0;i<n;i++)sum+=q[i].b-q[i].a;printf("%lld\n",sum);}return 0;}

//这是队友的


 

#include<stdio.h>#include<algorithm>using namespace std;const int MAXN=100010;struct Node{    int s,e;};Node date[MAXN];int cmp(Node a,Node b){    if(a.s!=b.s)return a.s<b.s;    return a.e<b.e;}int main(){    int N;    while(~scanf("%d",&N)){        for(int i=0;i<N;i++){            scanf("%d%d",&date[i].s,&date[i].e);        }        sort(date,date+N,cmp);        int s=0,e=0,ans=0;        for(int i=0;i<N;i++){            if(!i)            {s=date[i].s;e=date[i].e;}            else if(date[i].s<=e&&date[i].e>e){                e=date[i].e;            }            else if(date[i].s>e)            {ans+=e-s;s=date[i].s;e=date[i].e;}        }        ans+=e-s;        printf("%d\n",ans);    }     return 0;}


 

0 0
原创粉丝点击