洛谷P1496火烧赤壁
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火烧赤壁相关推荐
- (离散化)洛谷P1496火烧赤壁
洛谷P1496火烧赤壁 前言:首先这道题,可以用模拟过,模拟方法需要一些技巧,但是本文讲的是离散化方法,就忽略模拟法了. 算法分析1:首先,如果忽略本题的船的位置范围(本题船位置范围达到了10^9而且 ...
- 洛谷 P1496 火烧赤壁 题解 —— 离散化
火烧赤壁 - 洛谷 一道离散化的基础题,对蒟蒻来说是很值得一试的 题目翻译 题目花里胡哨,但问题就是在数轴上给出n个区间,统计这n个区间一共覆盖了多少个数 题目解析 本题有很多方法,这里只介绍用离散化 ...
- 洛谷 P1496 火烧赤壁(离散化
P1496 火烧赤壁 世界上只有一种英雄主义,就是认清了生活的本质后依然爱他. ----罗曼罗兰 通往成功的道路上有很多挫折,这正是成功的意义所在. ----yxr 记今天下午上机退化成海淀区小学二年 ...
- 洛谷P1496 火烧赤壁
链接 https://www.luogu.org/problemnew/show/P1496 大意 给定数轴上nnn个线段,求总线段长度(重合的部分只能算1次) 数据范围 n<=20000&qu ...
- 洛谷 P1496 火烧赤壁
火烧赤壁 题目背景 曹操平定北方以后,公元 208 年,率领大军南下,进攻刘表.他的人马还没有到荆州,刘表已经病死.他的儿子刘琮听到曹军声势浩大,吓破了胆,先派人求降了. 孙权任命周瑜为都督,拨给他三 ...
- 洛谷-题解 P2672 【推销员】
独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...
- 洛谷 P1142 轰炸
洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...
- 洛谷 P1387 最大正方形
P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...
- 洛谷P2763 试题库问题
题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...
最新文章
- 仓库管理常见问题及价值
- Bitcoin.com宣布将成立2亿美元的BCH生态系统投资基金
- Travis CI + github + hexo 自动化部署
- 19年8月 字母哥 第五章 静态资源与模板引擎的整合 用热点公司网不行
- 支援 Chrome 插件:微软 Chromium 内核 Edge 浏览器可以下载啦!
- Pocket Gem OA: Path Finder
- devops是运维吗_您是DevOps的合适人选吗?
- 淘宝flexible.js的使用
- 不为人知的AI简史:人机共生梦想家,却意外促成互联网的出现
- 深入解读Linux内存管理系列(总览)
- 小米 红米 历代手机型号大全 发布时间 发布价格
- cachecloud 安装
- 电子合同的风险有哪些?小心别被坑了
- Mac安装pr拓展时没有CEP文件夹
- Axure RP9使用指南
- 软件工程和软件开发过程
- 人工智能领域专业术语合集
- postman 安装失败 Failed to install the .NET Framework, try installingthe latest version manully
- 理解 rb_tree
- OpenSSL SSL_read: Connection was reset, errno 10054
热门文章
- 1074:津津的储蓄计划
- VirtualBox 安装 Ubuntu16.04服务器版系统
- 有赞android电话面试,挖财 /有赞电话面试 题目分享
- Spring项目启动完成后,自动执行一次指定方法
- SQL研习录(26)——子查询
- 有Python基础学习PyTorch,可以选择的书籍有哪些?
- java实现微信小程序客服功能开发,后台接受用户发送消息实现关键词自动回复
- 故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。 在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔, 再过一个月就能生下一对小兔,并且此后每个月都生一对小
- python练习题:045:正常血压
- 问题 C: 零基础学C/C++13——华氏摄氏温度转换