Minimal coverage (贪心,最小覆盖)

 

题目大意:先确定一个M, 然后输入多组线段的左端和右端的端点坐标,然后让你求出来在所给的线段中能够

[0, M] 区域完全覆盖完的最少需要的线段数,并输出这些线段的左右端点坐标。

 

思路分析:

       线段区间的起点是0,那么找出所有区间起点小于0中的最合适的区间。

       因为需要尽量少的区间,所以选择右端点更大的区间,它包含所选线段更大。

       如果在所有区间中找到了解,且右端点小于M,则把找到的区间的右端点定为新的线段区间的起点。

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 
 7 
 8 using namespace std;
 9 
10 struct node
11 {
12     int L, R;
13 }a[100010], b[100010];
14 
15 bool cmp(node a, node b)
16 {
17     return a.R > b.R;
18 }
19 
20 int main() 
21 {
22     int M;
23     while(scanf("%d", &M) != EOF)
24     {
25         int Index = 0;
26         while(1)
27         {
28             scanf("%d%d", &a[Index].L, &a[Index].R);
29             if(a[Index].L == 0 && a[Index].R == 0)
30                 break;
31             ++Index;
32         }
33         
34         sort(a, a+Index, cmp);
35         
36         int border = 0;        // 起始边界点为0 
37         int cnt = 0;
38         while(border < M)
39         {
40             int i = 0;
41             for(; i < Index; ++i)
42             {
43                 // a[i].R >= border提交将会Runtime error 
44                 if(a[i].L <= border && a[i].R > border)
45                 {
46                     b[cnt] = a[i];
47                     cnt++;
48                     border = a[i].R;    // 更新边界点 
49                     break;
50                 }
51             }
52             if(i == Index)
53                 break;
54         }
55         
56         
57         if(border < M)
58             cout << "No solution" << endl;
59         else
60         {
61             cout << cnt << endl;
62             for(int i = 0; i < cnt; ++i)
63                 cout << b[i].L << " " << b[i].R << endl;
64         }
65     }
66             
67     return 0;
68 }

 

转载于:https://www.cnblogs.com/FengZeng666/p/11120095.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vuex知识点

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式&#xff1b;集中存储和管理应用的所有组件状态。 状态&#xff1a;什么是状态&#xff0c;我们可以通俗的理解为数据。Vue只关心视图层&#xff0c;那么视图的状态如何来确定&#xff1f;我们知道是通过数据驱动&#xff0c…

[论文笔记]CVPR2017_Joint Detection and Identification Feature Learning for Person Search

Title: Joint Detection and Identification Feature Learning for Person Search; aXiv上该论文的第一个版本题目是 End-to-End Deep Learning for Person SearchAuthors: Tong Xiao1* ; Shuang Li1* ; Bochao Wang2 ; Liang Lin2; Xiaogang Wang1 Affilations: 1.The Chines…

.NetCore如何使用ImageSharp进行图片的生成

ImageSharp是对NetCore平台扩展的一个图像处理方案&#xff0c;以往网上的案例多以生成文字及画出简单图形、验证码等方式进行探讨和实践。 今天我分享一下所在公司项目的实际应用案例&#xff0c;导出微信二维码图片&#xff0c;圆形头像等等。 一、源码获取 Git项目地址&…

vue2工程

vue当然可以使用script标签引入&#xff0c;不需任何依赖即可按照vue的语法进行使用。但中大型商用项目中&#xff0c;还是建议使用工程化方式使用vue&#xff0c;vue提供了官方脚手架vue-cli&#xff0c;可以快速构建vue项目&#xff0c;脚手架会帮助开发者创建好建议的工程目…

【GamePlay】入门篇

【GamePlay】入门篇 游戏性编程是指通过一系列游戏系统将游戏想法变成现实的过程。 本次的简例以NPC设计为主。 通常在进行脚本设计前&#xff0c;对NPC的属性进行基本的添加和设定&#xff0c;诸如动画系统、物理系统等等。 1.动画系统 添加Animator组件&#xff0c;绑定骨骼。…

HttpHttps

http协议与https Http 客户端发送一个HTTP请求到服务器的请求消息包括以下格式&#xff1a; **请求行&#xff08;request line&#xff09;、请求头部&#xff08;header&#xff09;、空行 和请求数据四个部分组成。** Get请求例子&#xff0c;使用Charles抓取的request&…

vue2使用axios post跳坑,封装成模块

终于将vue-resource替换成axios了&#xff0c;其中像application/x-www-form-urlencoded发送的头信息以及返回的response结果这两点都需要注意一下。 其实https://github.com/mzabriskie/axios也有说明的。因为我在vue-resource中使用了Vue.http.options.emulateJSON true;&am…

并发与多线程

并发 并发&#xff08;concurrency&#xff09;是指CPU在某个时间段内交替处理多任务的能力。每个CPU不可能只顾着执行某个进程&#xff0c;而让其他进程一直等待被执行。所以&#xff0c;CPU把可执行时间均分成若干份&#xff0c;每个进程执行一份或多份时间后&#xff0c;记录…

synchronize原理

synchronized的三种应用方式 一. 修饰实例方法&#xff0c;作用于当前实例加锁&#xff0c;进入同步代码前要获得当前实例的锁。 二. 修饰静态方法&#xff0c;作用于当前类对象加锁&#xff0c;进入同步代码前要获得当前类对象的锁。 三. 修饰代码块&#xff0c;指定加锁对象&…

不能修改“System Roots”钥匙串

iOS mac添加证书 不能修改“System Roots”钥匙串错误 如图&#xff1a; 解决方式&#xff1a; 打开钥匙串---登录---&#xff0c;直接把证书拖过来 然后&#xff0c;查看--我的证书&#xff0c;里面&#xff0c;找到证书&#xff0c;即可

未来产品的设计

Donald A. Norman继《情感化设计》之后&#xff0c;又一设计精品力作&#xff1a; 未来产品的设计样章试读及本书预定&#xff1a;http://www.china-pub.com/195642市场价 &#xff1a;&#xffe5;39.00 会员价 &#xff1a; &#xffe5;29.25(75折) 【作  者】(美)Donald…

css之字体图标

SVG与字体图标 SVG图片是矢量图片&#xff0c;不会随着图片的伸缩而影响质量&#xff0c;通常把只有一种颜色的图标做成SVG&#xff0c;通过SVG生成字体图标&#xff0c;放到项目中使用。 https://icomoon.io/是一个比较快捷的生成字体图标的线上工具&#xff0c;进入主页后&…

研发阶段模拟接口数据

因为在vue-cli工程中需要创建很多.vue文件&#xff0c;我们希望创建vue文件和创建html、css、js文件一样右键即可选择创建&#xff0c;并且创建的文件中可预先写好模板代码。 webstorm-Preferences打开选项界面 选择File and Code Templates&#xff0c;点击绿色加号 填…

真实项目中 ThreadLocal 的妙用

一、什么是 ThreadLocal ThreadLocal 提供了线程的局部变量&#xff0c;每个线程都可以通过 set() 和 get() 来对这个局部变量进行操作&#xff0c;但不会和其他线程的局部变量冲突&#xff0c;实现了线程间的据隔离。 简单讲&#xff1a;一个获取用户的请求线程 A&#xff0c;…

css之flex布局

flex布局是css3中的重要布局方式&#xff0c;称为“弹性布局”&#xff0c;每次想到它主要是遇到元素垂直居中、元素宽高自适应的问题&#xff0c;这些问题在flex中都能过简单设置就解决&#xff0c;它更像是原生APP中的布局操作&#xff0c;布局不必写N多的盒模型代码来实现&a…

javascript对URL中的参数进行简单加密处理

javascript的api本来就支持Base64&#xff0c;因此我们可以很方便的来进行编码和解码。 var encodeData window.btoa("namexiaoming&age10")//编码 var decodeData window.atob(encodeData)//解码。 下面来个具体的例子来说明如何对url中参数进行转码&#xff…

HTML元素title里面如何换行

在调试代码的时候我就遇到一个问题&#xff0c;HTML元素title里面通常只显示一行&#xff0c;那我想要他换行&#xff0c;就是多行显示&#xff0c;如何实现&#xff1f;JS代码里面比如Alert里面又该如何换行&#xff1f; 经过我的一番实验 要实现这种效果有几种方法&#xff0…

div内图片和文字水平垂直居中

大小不固定的图片、多行文字的水平垂直居中 本文综述 想必写css的都知道如何让单行文字在高度固定的容器内垂直居中&#xff0c;但是您知道或者想过让行数不固定的文字在高度固定的容器内垂直居中呢&#xff1f;本文将会告诉你如何实现多行文字的垂直居中显示。 关于图片垂直居…

敏友的【敏捷个人】有感(3): 有感于“敏捷个人”讨论与练习

2010年我对个人管理进行了自己的一些思考&#xff0c;在2011年提出敏捷个人概念&#xff0c;并且在线上、线下进行了多次交流&#xff0c;在一些大会上也做过分享。现在&#xff0c;已经有很 多IT和非IT的敏友们知道并在践行敏捷个人&#xff0c;帮助自己更快的成长。我收到大家…

jQuery编写插件

引言&#xff1a; 在项目中不同页面经常要用到已经写好的交互&#xff0c;比如弹窗&#xff0c;比如下拉菜单&#xff0c;比如选项卡&#xff0c;比如删除... 此时如果每次都把代码copy一份无疑是一件比较麻烦并且无趣的事情&#xff0c;而且个人认为有些low了&#xff0c;我们…