Ural 1303. Minimal Coverage / 最小区间覆盖

2024-06-15 11:58

本文主要是介绍Ural 1303. Minimal Coverage / 最小区间覆盖,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

求最小区间覆盖0-m 以前做过 现在墨迹半天写出来 弱爆了

像这样的1 9 和 2 7 根据贪心原理后者不需要直接去掉

然后按照起点从小到大排序 在按照终点从大到小排序  贪心模拟一下每次能不选就不选

(1 6)  (1 5)  (2 9)   (3 10)   (7 10)选择(1 6) 之后 下一个选择是(3 10) 他是最后一个能选的  不选就会断开 并且比选(2 9)更优

会不会说如果是这样(1 6)  (1 5)  (2 12)   (3 10)   (7 10) 不选(3 10) 选(2 12)更优 之前说过了 预处理(2 10)包含了(3 10) 所以(3 10) 在贪心之前先去掉了

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 100010;
struct node
{int s, e;
}a[maxn], b[maxn], ans[maxn];
bool cmp(node a, node b)
{if(a.s != b.s)return a.s < b.s;return a.e > b.e;
}
int main()
{int m, n;while(scanf("%d", &m) != EOF){n = 0;int s, e;while(scanf("%d %d", &s, &e) , s || e){a[n].s = s;a[n++].e = e;}sort(a, a+n, cmp);int i, j, k = 0;b[0] = a[0];for(i = 1; i < n; i++){if(a[i].s > b[k].s && a[i].e > b[k].e)b[++k] = a[i];}n = k;n++;b[n].s = m+1;b[n].e = m+1;k = 0;int y = -1;for(i = 0; i < n; i++){if(b[i+1].s > 0 && b[i].s <= 0){ans[k++] = b[i];y = b[i].e;break;}}if(!k){puts("No solution");continue;}for(; i < n; i++){if(y >= m){break;}if(b[i+1].s > y && b[i].s <= y){ans[k++] = b[i];y = b[i].e;}}if(!k || y < m){puts("No solution");continue;}else{printf("%d\n", k);for(i = 0; i < k; i++){printf("%d %d\n", ans[i].s, ans[i].e);}}}return 0;
}
/*
1
0 100
-1 0
-5 -3
2 5
0 04
0 2
3 4
-1 0
-5 -3
3 5
0 06
0 2
1 2
2 3
3 4
4 5
2 4
5 6
3 6
0 9
-1 100
0 0*/


 

 

这篇关于Ural 1303. Minimal Coverage / 最小区间覆盖的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063385

相关文章

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

hdu 1102 uva 10397(最小生成树prim)

hdu 1102: 题意: 给一个邻接矩阵,给一些村庄间已经修的路,问最小生成树。 解析: 把已经修的路的权值改为0,套个prim()。 注意prim 最外层循坏为n-1。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstri

poj 2175 最小费用最大流TLE

题意: 一条街上有n个大楼,坐标为xi,yi,bi个人在里面工作。 然后防空洞的坐标为pj,qj,可以容纳cj个人。 从大楼i中的人到防空洞j去避难所需的时间为 abs(xi - pi) + (yi - qi) + 1。 现在设计了一个避难计划,指定从大楼i到防空洞j避难的人数 eij。 判断如果按照原计划进行,所有人避难所用的时间总和是不是最小的。 若是,输出“OPETIMAL",若

poj 2135 有流量限制的最小费用最大流

题意: 农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。 农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。 约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。 如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。 解析: 如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。 但是现在要去要回