【ARC076D/F】Exhausted?
Description
题目链接
Solution
场上尝试使用优化建图网络流实现,结果T到怀疑人生。
鉴于这是个匹配问题,考虑用贪心做一下。
先退一步,想一下如果每一个人只有\([1,l_i]\)单个限制时怎么匹配。
我们应该对所有人按\(l_i\)从小到大排序。从前往后扫一次,能放则放,就能做到最大匹配。
再加上\([r_i,m]\)这一种选择,要怎么做?
上面的贪心法,如果只考虑靠左端的匹配,是正确的;但不被匹配的人,显然要单独拉出,做一次按\(r\)的与上一个样的贪心。我们能不能在进行左端贪心的时候,保证剩余的人在第二次右端贪心时全局最优呢?有一种直接的想法,就是剩余人的\(r\)要尽可能的小,这样才能最大化匹配成功率。
依然按\(l_i\)从小到大排序,能放则放;如果不能放呢?这时候我们要考虑多一些东西了,我们还有一种选择,就是用当前的人替代掉之前选择的一个人。如果当前人能替代已选择的某一个人,应该满足一个条件,就是当前人的\(r\)要大于已经选择的某一个人的\(r\)。如果这样一个人存在,显然用将那个人的位置空出来,让当前人进去,而让那个人不填更加优,因为这样可以使未填的人的\(r\)尽可能小,最大化匹配成功率。
因此对于已选择的人,关于\(r\)维护一个小根堆。如果能加则加,否则和堆顶的\(r\)进行比较,能替换则替换。
最后对于未选择的人,进行一次从右向左对于\(r\)的贪心即可。
Code
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int N=200005;
int n,m;
struct People{
int l,r,id;
friend bool operator < (People a,People b){
return a.r>b.r;
}
}a[N],b[N];
bool inq[N];
int cnt;
priority_queue<People> q;
bool cmpl(const People &a,const People &b){
return a.l<b.l;
}
bool cmpr(const People &a,const People &b){
return a.r>b.r;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d%d",&a[i].l,&a[i].r);
sort(a+1,a+1+n,cmpl);
int nowl=0,nowr=m+1,last;
for(int i=1;i<=n;i++){
a[i].id=i;
if(nowl+1<=a[i].l){
nowl++;
q.push(a[i]);
inq[i]=true;
}
else if(!q.empty()){
People best=q.top();
if(a[i].r>best.r){
q.pop();
inq[best.id]=false;
q.push(a[i]);
inq[i]=true;
}
}
}
for(int i=1;i<=n;i++)
if(!inq[i])
b[++cnt]=a[i];
sort(b+1,b+1+cnt,cmpr);
for(int i=1;i<=cnt&&nowr-1!=nowl;i++)
if(nowr-1>=b[i].r)
nowr--;
printf("%d\n",n-(nowl+(m-nowr+1)));
return 0;
}
【ARC076D/F】Exhausted?的更多相关文章
- 【AtCoder Regular Contest 076 F】Exhausted (贪心)
Description 机房里有M台电脑排成一排,第i台电脑的坐标是正整数i. 现在有N个OIer进入了机房,每个OIer需要一台电脑来学tui习ji,同时每个OIer对自己电脑所处的坐标范围有一个要 ...
- 【SDOI2018】反回文串(【ARC064 F】Rotated Palindromes 加强版)
题意 给你一个正整数 \(n\),求有多少字符集为 \(1\) 到 \(k\) 之间整数的字符串,使得该字符串可以由一个长度为 \(n\) 的回文串循环移位得到. ARC原题 \(100\%\) 的数 ...
- 【AGC005 F】Many Easy Problems
神他吗一天考一道码农题两道 FFT(其实还是我推式子一窍不通) 题意 给你一棵 \(n\) 个点的树,再给你一个常数 \(k\). 设 \(S\) 为树上某些点的集合,定义 \(f(S)\) 为最小的 ...
- 模仿天猫实战【SSM版】——后台开发
上一篇文章链接:模仿天猫实战[SSM版]--项目起步 后台需求分析 在开始码代码之前,还是需要先清楚自己要做什么事情,后台具体需要实现哪些功能: 注意: 订单.用户.订单.推荐链接均不提供增删的功能. ...
- 【大数据安全】基于Kerberos的大数据安全验证方案
1.背景 互联网从来就不是一个安全的地方.很多时候我们过分依赖防火墙来解决安全的问题,不幸的是,防火墙是假设"坏人"是来自外部的,而真正具有破坏性的攻击事件都是往往都是来自于内部的 ...
- X86逆向1:软件破解入门课【课件下载】
从本节课开始,我将带领小白入门学习软件破解的相关内容,大佬绕过,以后将会定期更新从最基本的破解知识点开始学习,由简单到复杂循序渐进,难度会逐步提高. 为了防止版权方面的争议,我将自行编写一些破解案例来 ...
- 【最大流】ECNA 2015 F Transportation Delegation (Codeforces GYM 100825)
题目链接: http://codeforces.com/gym/100825 题目大意: N(N<=600)个点,每个点有个名字Si,R(R<=200)个生产商在R个点上,F(F<= ...
- 【最短路】NEERC15 F Froggy Ford(2015-2016 ACM-ICPC)(Codeforces GYM 100851)
题目链接: http://codeforces.com/gym/100851 题目大意: 一只青蛙跳过宽为W的河,河中游N个石头,坐标xi,yi,现在往河中间添加一个石头,使得每次跳跃的最大的距离最小 ...
- 【郑轻邀请赛 F】 Tmk吃汤饭
[题目链接]:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2132 [题意] [题解] 很容易想到用队列来模拟; 这个队列维护的是正在煮的4个人煮 ...
随机推荐
- R语言--输入输出
基本输入输出 输入: readline, edit, fix 输出: print, cat 输出重定向 sink #基本输入输出 x=readline('请输入:') #读取输入,一行为一个字符串 x ...
- 20155334 网络对抗PC平台逆向破解(二)
注入Shellcode并运行攻击 shellcode就是一段机器指令(code) 通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe) ...
- Luogu T24242 购物券Ⅰ(数据已加强)
这是一道比赛时的题目,但由于我没报名,所以浪费了一个大好的切水题的机会. 是经典的meet in middle(折半搜索)的模板题,但是之前一直没找到这种题目,今天终于看到了. 由于m的范围极大,因此 ...
- TMS320VC5509片内ADC采集
1. ADC采集比较简单,内部的10位的ADC,AIN0-AIN3的输入,主要是用的CSL的库函数#include <csl_adc.h> ; Uint16 samplestoraage[ ...
- 利用privoxy劫持http网站数据,插入广告,获取用户名,密码
看了几篇privoxy的文章,感觉讲的都不详细,在此整理一遍. 注:本文下面的内容仅讨论思路,作为技术交流之用,请勿用作非法途径. Privoxy是一款带过滤功能的代理服务器,针对HTTP.HTTPS ...
- Redis基本数据类型介绍笔记
Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). String(字符串) st ...
- Flask学习-Flask app接受第一个HTTP请求
一.__call__() 在Flask app启动后,一旦uwsgi收到来自web server的请求,就会调用后端app,其实此时就是调用app的__call__(environ,start_res ...
- 让docker中的mysql启动时自动执行sql文件
本文提要 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Docker ...
- 用Beyond Compare比较文本时,忽略不重要文本的方法
Beyond Compare是一款好用的文本比较工具,可以比较纯文本文件.源代码和HTML,Word文档.Adobe和pdf文件.在使用Beyond Compare比较文本文件时,有些不重要的文本差异 ...
- OpenGL学习(3)——Shader
之前已经接触过Vertex Shader和Fragment Shader,这次学习如何编写Shader并封装成类. Shader源码主要有四部分: 版本声明 #version xxx core: 使用 ...