【多题合集】线段覆盖1、2、3
1214 线段覆盖
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题解
题目描述 Description
给定x轴上的N(N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数。有些线段之间会相互交叠或覆盖。请你编写一个程序,从给出的线段中去掉尽量少的线段,使得剩下的线段两两之间没有内部公共点。所谓的内部公共点是指一个点同时属于两条线段且至少在其中一条线段的内部(即除去端点的部分)。
输入描述 Input Description
输入第一行是一个整数N。接下来有N行,每行有二个空格隔开的整数,表示一条线段的二个端点的坐标。
输出描述 Output Description
输出第一行是一个整数表示最多剩下的线段数。
样例输入 Sample Input
3
6 3
1 3
2 5
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
0
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct x
{
int l;
int r;
}a[1001];
int comp(const x&a,const x&b)
{
if (a.r>b.r) return 0;
if (a.r<b.r) return 1;
if (a.l>b.l) return 0;
if (a.l<=b.l) return 1;
}
int main()
{
int n;
int ans;
scanf("%d",&n);
ans=n;
for (int i=0;i<n;i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
if (a[i].l>a[i].r) swap(a[i].l,a[i].r);}
sort(a+0,a+n,comp);
int i=0;//i用来记录当前位置的线段
int ss=1;
while (i+ss<n)
{
if (a[i].r<=a[i+ss].l&&(i+ss<n)) //不相交时
{
i=i+ss;//更新状态,跳到与之比较的线段
ss=1;
}
else if (a[i].r>a[i+ss].l&&a[i].r<=a[i+ss].r&&(i+ss<n))//部分相交
{
ans--;
ss++;
}
else if (a[i].r>a[i+ss].l&&a[i].r>a[i+ss].r&&(i+ss<n))//覆盖,前一条比后一条长
{
ans--;
i++;
ss=1;
}
}printf("%d",ans);
}
3027 线段覆盖 2
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题解
查看运行结果
题目描述 Description
数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段价值之和最大。
n<=1000
输入描述 Input Description
第一行一个整数n,表示有多少条线段。
接下来n行每行三个整数, ai bi ci,分别代表第i条线段的左端点ai,右端点bi(保证左端点<右端点)和价值ci。
输出描述 Output Description
输出能够获得的最大价值
样例输入 Sample Input
3
1 2 1
2 3 2
1 3 4
样例输出 Sample Output
4
数据范围及提示 Data Size & Hint
数据范围
对于40%的数据,n≤10;
对于100%的数据,n≤1000;
0<=ai,bi<=1000000
0<=ci<=1000000
这道题与上题不同在于这里要求的是最大权值,留下的线段最多不一定代表权值最大所以用dp的方式更加合适(当然之前还是要排序),但是po主太弱了,乱搞出来一个程序然后就过了,怎么看都不像dp……
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct xd
{
int l,r,value;
}a[1001];
int f[1001],n;
int comp(xd x,xd y)
{
if (x.l<y.l) return 1;
if (x.l>y.l) return 0;
if (x.r<y.r) return 1;
if (x.r>=y.r) return 0;
if (x.value>y.value) return 0;
else return 1;
}
main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].value);
sort(a+1,a+n+1,comp);
for (int i=1;i<=n;i++) f[i]=a[i].value;
for (int i=1;i<=n;i++)
{
int maxn=0;
for (int j=1;j<=i;j++) if (a[j].r<=a[i].l)maxn=max(maxn,f[j]);//只要没有相交,那么我们就可以把它留下来,从第i条向前搜索,看看有没有和它不相交的。
f[i]+=maxn;
}
printf("%d",f[n]);
}……
……
1643 线段覆盖 3
时间限制: 2 s
空间限制: 256000 KB
题目等级 : 黄金 Gold
题解
题目描述 Description
在一个数轴上有n条线段,现要选取其中k条线段使得这k条线段两两没有重合部分(端点可以重合),问最大的k为多少。
输入描述 Input Description
输入格式
输入文件的第1行为一个正整数n,下面n行每行2个数字ai,bi,描述每条线段。
输出描述 Output Description
输出格式
输出文件仅包括1个整数,为k的最大值
样例输入 Sample Input
3
0 2
2 4
1 3
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
数据范围
对于20%的数据,n≤10;
对于50%的数据,n≤1000;
对于70%的数据,n≤100000;
对于100%的数据,n≤1000000,0≤ai<bi≤1000000。
无非就是数据变大了,把数组开大一点就可以了
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct x
{int l;int r;
}a[1000001];
int comp(const x&a,const x&b)
{if (a.r>b.r) return 0;if (a.r<b.r) return 1;if (a.l>b.l) return 0;if (a.l<=b.l) return 1;
}
int main()
{int n;int ans;scanf("%d",&n);ans=n;for (int i=0;i<n;i++) {scanf("%d%d",&a[i].l,&a[i].r);if (a[i].l>a[i].r) swap(a[i].l,a[i].r);}sort(a+0,a+n,comp);int i=0;int ss=1;
// for (int i=0;i<n;i++) printf("%d %d ",a[i].l,a[i].r);while (i+ss<n){if (a[i].r<=a[i+ss].l&&(i+ss<n)) {i=i+ss;ss=1;}else if (a[i].r>a[i+ss].l&&a[i].r<=a[i+ss].r&&(i+ss<n)){ans--;ss++;}else if (a[i].r>a[i+ss].l&&a[i].r>a[i+ss].r&&(i+ss<n)){ans--;i++;ss=1;}}printf("%d",ans);
}
【多题合集】线段覆盖1、2、3相关推荐
- 网络安全web方向入门题合集
网络安全web方向入门题合集 [HCTF 2018]WarmUp 验证 [极客大挑战 2019]EasySQL [极客大挑战 2019]Havefun [强网杯 2019]随便注 前期工作 堆叠注入查 ...
- 2020年前端面试之JS手写代码题合集
2020年前端面试之JS手写代码题合集 预计会有上千道题,后续慢慢补! 1. 写一个把字符串大小写切换的方法 function caseConvert(str){return str.replace ...
- 大英赛C类翻译题合集
大英赛C类翻译题合集 2012初赛 2013初赛 2013决赛 2014初赛 2014决赛 2012初赛 既然没有退路了,我们不妨试试他的方法.(might as well) Since there ...
- 备战网络工程师认证考试:历年真题合集
备战网络工程师认证考试:历年真题合集 网络工程师是通过学习和训练,掌握网络技术的理论知识和操作技能的网络技术人员.网络工程师能够从事计算机信息系统的设计.建设.运行和维护工作.参加全国计算机等级考试之 ...
- Coderforces 字符串水题合集
今天我们聊聊 Coderforces 字符串水题合集. 字符串就是string. 这是string的百度翻译,我们要谈的是画框的.↓ string是C++.java.VB等编程语言中的字符串,字符串是 ...
- 计算机组成原理常考大题合集
计算机组成原理常考大题合集 1.在"Cache-主存-辅存"三级存储体系中,"Cache-主存"结构与"主存-辅存"结构的引入为了解决什么问 ...
- HDLBits刷题合集—9 Arithmetic Circuits
HDLBits刷题合集-9 Arithmetic Circuits HDLBits-66 Hadd Problem Statement 创建一个半加器.半加器将两个输入(不带低位的进位)相加产生和和向 ...
- 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附权威答案)
2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...
- 金三银四如何抱佛脚?2022 最新大厂 Java 面试真题合集(附权威答案)
这些面试资料都是我通过各种渠道收集到的大厂面试真题,并附有最新的权威答案,绝不是网络上那些已经是几年前甚至十几年前的面试题所能媲美的,除面试题外还有我整理的一些经典 Java 学习电子书也都可以无偿分 ...
最新文章
- [置顶] 当我拿车钥匙的时候,刚交的女朋友跑了。。。
- SAP S4 HANA-The future is here?
- OpenCASCADE绘制测试线束:数据交换命令之XDE 颜色命令
- Codeforces626B - Cards【模拟】
- sess.run(tf.global_variables_initializer()) 做了什么?
- 选择排序算法python
- 锐界机器人_2019款锐界智能家居远程控制使用介绍
- 金色丰收的FreeEIM季节
- 阿根廷点杀荷兰,24年后再进决赛
- oracle技术之oracle备份恢复概述
- EntityFramework 连接数据库出错
- OAuth 2和JWT - 如何设计安全的API?
- 软件观念革命:交互设计精髓_“被催债”的设计推荐书单
- mysql索引失效的情况
- Android studio 之 Kotlin Not Configured
- ttest求pvalue_TTEST 在EXCEL计算出的结果是t还是p值,用哪一个公式在excel中计算出t值和p值是多少...
- nginx 配置基于域名的虚拟主机
- 欧氏空间距离和内积_欧氏空间的内积与线性变换
- hadoop快速自我学习--hadoop平台管理与维护
- 用脚本组装xgen 后期文件,缓存正确,毛发飞的可能分析
热门文章
- 【华为大咖分享】1.云上开发,代码托管只是第一步(后附PPT下载地址)
- 计算机桌面文字显示软件,电脑桌面添加文字_电脑桌面添加文字软件
- 红橙Darren视频笔记 热更新 bsdiff bspatch 在Android设备上的应用 架构篇1完结篇
- 练习一下爬虫,使用Selenium包
- 使用sublime的SQLTools插件访问MySQL的配置方法
- linux默认权限二进制与,Linux系统文件的默认权限和特殊权限
- 大年30还多少天_大美鹅老李告诉你30天的鹅需要多少温度?
- python的exe缺少dll_python错误py2exe(缺少DLL)
- redis和php有什么,redis主要用来做什么
- 在linux centos7上安装git