Codeforces555 B.Case of Fugitive(贪心+set)

2024-03-22 07:10

本文主要是介绍Codeforces555 B.Case of Fugitive(贪心+set),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:

在这里插入图片描述
如果能联通,输出连接方案。

数据范围:n,m<=2e5,1<=l,r,a(i)<=1e18

解法:
假设相邻区间为[l1,r1],[l2,r2],
那么能连接他们的木板长度应该在范围[l2-r1,r2-l1].
这样的话就有n-1个形如(l,r)的二元组.
将二元组按照r从小到大排序,r相同时按照l从小到大排序.
因为排序之后r是递增的,r相同时l是递增的,
那么遍历二元组(l,r),应该贪心地找在[l,r]范围内的最短木板.
木板可以用set存,找木板在set里面二分就行了.
code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PI pair<int,int>
const int maxm=2e5+5;
struct Line{int l,r,id;
}xx[maxm];
int l[maxm],r[maxm];
int ans[maxm];
int n,m;
bool cmp(Line a,Line b){if(a.r!=b.r)return a.r<b.r;return a.l<b.l;
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);cin>>n>>m;//for(int i=1;i<=n;i++){cin>>l[i]>>r[i];}for(int i=1;i<=n-1;i++){xx[i]={l[i+1]-r[i],r[i+1]-l[i],i};}sort(xx+1,xx+1+(n-1),cmp);//multiset<PI>s;for(int i=1;i<=m;i++){int x;cin>>x;s.insert({x,i});}//for(int i=1;i<=n-1;i++){auto it=s.lower_bound({xx[i].l,0});//找>=l的最小的if(it==s.end()||it->first>xx[i].r){cout<<"No"<<endl;return 0;}ans[xx[i].id]=it->second;s.erase(it);}cout<<"Yes"<<endl;for(int i=1;i<=n-1;i++){cout<<ans[i]<<' ';}cout<<endl;return 0;
}

这篇关于Codeforces555 B.Case of Fugitive(贪心+set)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

SQL中的CASE WHEN用法小结

《SQL中的CASEWHEN用法小结》文章详细介绍了SQL中的CASEWHEN函数及其用法,包括简单CASEWHEN和CASEWHEN条件表达式两种形式,并通过多个实际场景展示了如何使用CASEWH... 目录一、简单CASE WHEN函数:二、CASE WHEN条件表达式函数三、常用场景场景1:不同状态展

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

usaco 1.3 Barn Repair(贪心)

思路:用上M块木板时有 M-1 个间隙。目标是让总间隙最大。将相邻两个有牛的牛棚之间间隔的牛棚数排序,选取最大的M-1个作为间隙,其余地方用木板盖住。 做法: 1.若,板(M) 的数目大于或等于 牛棚中有牛的数目(C),则 目测 给每个牛牛发一个板就为最小的需求~ 2.否则,先对 牛牛们的门牌号排序,然后 用一个数组 blank[ ] 记录两门牌号之间的距离,然后 用数组 an

poj 3190 优先队列+贪心

题意: 有n头牛,分别给他们挤奶的时间。 然后每头牛挤奶的时候都要在一个stall里面,并且每个stall每次只能占用一头牛。 问最少需要多少个stall,并输出每头牛所在的stall。 e.g 样例: INPUT: 51 102 43 65 84 7 OUTPUT: 412324 HINT: Explanation of the s

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

POJ2010 贪心优先队列

c头牛,需要选n头(奇数);学校总共有f的资金, 每头牛分数score和学费cost,问合法招生方案中,中间分数(即排名第(n+1)/2)最高的是多少。 n头牛按照先score后cost从小到大排序; 枚举中间score的牛,  预处理左边与右边的最小花费和。 预处理直接优先队列贪心 public class Main {public static voi

ural 1820. Ural Steaks 贪心

1820. Ural Steaks Time limit: 0.5 second Memory limit: 64 MB After the personal contest, happy but hungry programmers dropped into the restaurant “Ural Steaks” and ordered  n specialty steaks