P1496火烧赤壁

题目:

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

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

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

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

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

输入格式

第一行一个整数 N。

以后 N 行,每行两个数:A[i], B[i],表示连环线上着火船只的起始位置和终点。

输出格式

输出着火船只的总长度。保证答案在 32 位带符号整数的表示范围内。

输入输出样例

输入#1:
3
-1 1
5 11
2 9
输出#1:
11
说明/提示

0<n<20000 -2147483648<a[i],b[i]<2147483648
————————————下面开始解析—————————————

方法一:

这道题如果没有负数

就会很简单

每次输入两个数

把bool数组从f[a[i]]到f[b[i]]

全部赋值为1

(初始值为0)

如果有负数

就再设一个数组

用来处理负数

下面附上1.0代码

#include<bits/stdc++.h>
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
struct cina
{int a;int b;
};
cina c[10001];
int n,sum,zd[1000001],fd[1000001];
int main()
{cin>>n;for(int i=1;i<=n;i++)cin>>c[i].a>>c[i].b;for(int i=1;i<=n;i++){if(c[i].a<0){if(c[i].b<0){for(int j=c[i].a;j<=c[i].b;j++){if(fd[-j]!=0){fd[-j]=0;sum++;}}}//如果这一段都是负数else{for(int j=c[i].a;j<=-1;j++){if(fd[-j]!=0){fd[-j]=0;sum++;}}for(int j=0;j<=c[i].b;j++){if(zd[j]!=0){zd[j]=0;sum++;}}}//如果前一段是负数,后一段是正数}else{for(int j=c[i].a;j<=c[i].b;j++){if(zd[j]!=0){zd[j]=0;sum++;}}}//这一段都是正数}cout<<sum<<endl;return 0;
}

但是

这道题数据范围很大

数组开不了太大

所以

这个方法

不靠谱!

方法2:

输入进来后

所有的变量先排序

接着分成以下三种方案:

1、如果a[i]小于b[i-1]并且b[i]大于b[i-1]
ans+=b[i]-b[i-1];
2、如果a[i]和b[i]都小于b[i-1]
ans不变
3、如果a[i]和b[i]都大于b[i-1]
ans+=b[i]-a[i]

下面是2.0代码

#include<bits/stdc++.h>
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int n,a[20001],b[20001],sum,temp,R;
//bool flag=true;
int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>a[i]>>b[i];for(int i=1;i<=n-1;i++){for(int j=1;j<=n-i;j++){if(a[j]>a[j+1])  {temp=a[j];a[j]=a[j+1];a[j+1]=temp;temp=b[j];b[j]=b[j+1];b[j+1]=temp;//b数组也要变}}}//排序//for(int i=1;i<=n;i++) cout<<a[i]<<" "<<b[i]<<endl;sum=b[1]-a[1];R=b[1];if(n==1){cout<<sum<<endl;return 0;}for(int i=2;i<=n;i++){if(a[i]<R) {if(b[i]<=R) continue;//方案2else{sum+=b[i]-R;R=b[i];continue;}//方案1}else {sum+=b[i]-a[i];R=b[i];}//方案3}cout<<sum<<endl;return 0;
}

你会发现

第一个测试点

超时了

解决的方法是

将冒泡排序改成选择排序

下面是3.0代码

#include<bits/stdc++.h>
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int n,a[20001],b[20001],sum,temp,R;
bool flag=true;
int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>a[i]>>b[i];for (int i=1;i<=n-1;i++)            {int k=i;for(int j=i+1;j<=n;j++)      if(a[j]<a[k])  k=j;if(k!=i)                             { temp = a[i];a[i] = a[k]; a[k] = temp; temp=b[i];b[i]=b[k];b[k]=temp;}}//改成了选择排序sum=b[1]-a[1];R=b[1];if(n==1){cout<<sum<<endl;return 0;}for(int i=2;i<=n;i++){if(a[i]<R) {if(b[i]<=R)continue;else{sum+=b[i]-R;R=b[i];continue;}}else {sum+=b[i]-a[i];R=b[i];}}cout<<sum<<endl;return 0;
}

总算通过!!!

洛谷P1496火烧赤壁相关推荐

  1. (离散化)洛谷P1496火烧赤壁

    洛谷P1496火烧赤壁 前言:首先这道题,可以用模拟过,模拟方法需要一些技巧,但是本文讲的是离散化方法,就忽略模拟法了. 算法分析1:首先,如果忽略本题的船的位置范围(本题船位置范围达到了10^9而且 ...

  2. 洛谷 P1496 火烧赤壁 题解 —— 离散化

    火烧赤壁 - 洛谷 一道离散化的基础题,对蒟蒻来说是很值得一试的 题目翻译 题目花里胡哨,但问题就是在数轴上给出n个区间,统计这n个区间一共覆盖了多少个数 题目解析 本题有很多方法,这里只介绍用离散化 ...

  3. 洛谷 P1496 火烧赤壁(离散化

    P1496 火烧赤壁 世界上只有一种英雄主义,就是认清了生活的本质后依然爱他. ----罗曼罗兰 通往成功的道路上有很多挫折,这正是成功的意义所在. ----yxr 记今天下午上机退化成海淀区小学二年 ...

  4. 洛谷P1496 火烧赤壁

    链接 https://www.luogu.org/problemnew/show/P1496 大意 给定数轴上nnn个线段,求总线段长度(重合的部分只能算1次) 数据范围 n<=20000&qu ...

  5. 洛谷 P1496 火烧赤壁

    火烧赤壁 题目背景 曹操平定北方以后,公元 208 年,率领大军南下,进攻刘表.他的人马还没有到荆州,刘表已经病死.他的儿子刘琮听到曹军声势浩大,吓破了胆,先派人求降了. 孙权任命周瑜为都督,拨给他三 ...

  6. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  7. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  8. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  9. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

最新文章

  1. 仓库管理常见问题及价值
  2. Bitcoin.com宣布将成立2亿美元的BCH生态系统投资基金
  3. Travis CI + github + hexo 自动化部署
  4. 19年8月 字母哥 第五章 静态资源与模板引擎的整合 用热点公司网不行
  5. 支援 Chrome 插件:微软 Chromium 内核 Edge 浏览器可以下载啦!
  6. Pocket Gem OA: Path Finder
  7. devops是运维吗_您是DevOps的合适人选吗?
  8. 淘宝flexible.js的使用
  9. 不为人知的AI简史:人机共生梦想家,却意外促成互联网的出现
  10. 深入解读Linux内存管理系列(总览)
  11. 小米 红米 历代手机型号大全 发布时间 发布价格
  12. cachecloud 安装
  13. 电子合同的风险有哪些?小心别被坑了
  14. Mac安装pr拓展时没有CEP文件夹
  15. Axure RP9使用指南
  16. 软件工程和软件开发过程
  17. 人工智能领域专业术语合集
  18. postman 安装失败 Failed to install the .NET Framework, try installingthe latest version manully
  19. 理解 rb_tree
  20. OpenSSL SSL_read: Connection was reset, errno 10054

热门文章

  1. 1074:津津的储蓄计划
  2. VirtualBox 安装 Ubuntu16.04服务器版系统
  3. 有赞android电话面试,挖财 /有赞电话面试 题目分享
  4. Spring项目启动完成后,自动执行一次指定方法
  5. SQL研习录(26)——子查询
  6. 有Python基础学习PyTorch,可以选择的书籍有哪些?
  7. java实现微信小程序客服功能开发,后台接受用户发送消息实现关键词自动回复
  8. 故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。 在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔, 再过一个月就能生下一对小兔,并且此后每个月都生一对小
  9. python练习题:045:正常血压
  10. 问题 C: 零基础学C/C++13——华氏摄氏温度转换