MJF wants to work

时间限制: 1 Sec   内存限制: 128 MB
提交: 75   解决: 15
[ 提交][ 状态][ 讨论版]

题目描述

MJF feel the summer vacation is very leisure. So he wants to work to earn money.
There are n jobs MJF can take part in.For job i, it has the start time ti.x, the end time ti.y and reward ci.
MJF wants to take part in two jobs (exact two jobs), and he wants to earn exactly M yuan. He doesn't want to earn one money more,he thinks it's a waste.
Becase MJF is a lazy boy, so he wants the time of the sum of two jobs shortest.
Becase MJF can only take part in one job in a time.So two jobs can't overlap.(ti.y < tj.x)

输入

The input consists of multiple test cases. 
For each test,the first line contains 2 integers n, m.(1 <= n, m <= 2e5)
Then following n lines, each line contains 3 integers ti.x, ti.y, ci.(1 <= ti.x, ti.y, ci <= 2e5)

输出

For each test case, print the value of the sum of two jobs' time.if there are no answer,please print"oh no!"

样例输入

3 10
1 2 3
3 4 7
4 6 7
1 10
1 10 10

样例输出

4
oh no!

提示

来源

2017ICPCECIC

[提交][状态]

先说说题意,某某某人想去挣钱,只想整m元,多了少了都不行(不太正常),有n个工作可以去干(不知道哪个学校毕业的,本菜如果有个工作就贼开心),然后还不想多浪费时间(这和我有点像),必须干两个活,让你去帮他先择工作,看看有没有正好的。

跟着中石油集训的时候做到了这一道题,我天,疯狂超时,想着。。。

觉得像贪心,那就开始排序,已每个工作的开始时间进行了个排序,然后就开始找,去暴力啦,果然超时,很伤心。

想了想,可以按c(工资)分以下类,因为如果这一份工作的工资确定了,另一份就必须得是那些钱了,然后加上map< int , vector<pair< int,int > >  >,结果还是超时,队有想起来,直接找间隔时间最小的,慢慢找上去,加上二分查找啥的,废了半天劲,写出来了,报了个wa,mmp,这就尴尬了,一脸绝望。

赛后看题解,我天,还能这么玩。。。

把以线段为基本单位改成已点为基本单位,把任务时长/金钱啥的关联上去,加上左右端点的标志位,然后就可以按时间点排序,时间点小的在左边,如果一样,左端点在左边,这样可以解决.(ti.y < tj.x)这种情况,接下来

按照点的时间排序

如果是左端点,就去找和这个线段(点和线段由结构体关联上了)匹配的任务的最小时间,这个时候在剩余工资的那个类里面全是可行解,只需要维护一个当前最小时间的值就行。

如果是右端点则去更新这个线段所在类别的时间最小值.(更新最小值其实就是相当于是前面的将这个任务加入类中)

这里推荐一个博客http://blog.csdn.net/mmy1996/article/details/76407613

ac代码:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>using namespace std;
const int maxn=2e5+10;
const int inf=0x3f3f3f3f;
int n,m,nodecnt;
int dp[maxn];
struct node{int xy;int tim;int mon;int dj;
}nn[2*maxn];bool cmp(node A,node B){if(A.xy != B.xy)return A.xy < B.xy;elsereturn A.dj < B.dj;
}int main(){while(~scanf("%d%d",&n,&m)){int x,y,c;nodecnt=0;for(int i=1;i<=n;i++){scanf("%d%d%d",&x,&y,&c);nn[++nodecnt].xy=x;nn[nodecnt].tim=y-x+1;nn[nodecnt].mon=c;nn[nodecnt].dj=0;nn[++nodecnt].xy=y;nn[nodecnt].tim=y-x+1;nn[nodecnt].mon=c;nn[nodecnt].dj=1; }sort(nn+1,nn+1+nodecnt,cmp);int ans=inf;memset(dp,0x3f,sizeof(dp));for(int i=1;i<=nodecnt;i++){if(nn[i].dj==0){ans=min(ans,dp[m-nn[i].mon]+nn[i].tim);}else{dp[nn[i].mon]=min(dp[nn[i].mon],nn[i].tim);}} if(ans==inf)printf("oh no!\n");elseprintf("%d\n",ans);}return 0;
}

左端点时选择去判断加上这个区间解是否可以更优,碰到右端点去更新一下dp。

经过不断更新和维护,可以把一个个区间加进去,一点点更新,保证最小,有点几分像dp思想,不过不知道这是什么方法。

2017ICPCECIC MJF wants to work相关推荐

  1. 2017ICPCECIC C.A math problem(高次剩余)

    题目链接:https://oj.neu.edu.cn/contest/70/problem/3 分析: 这题略坑..O(nlogn)过不了,实际上t(1)=(p-1)/gcd(k,p-1),O(log ...

  2. 使用unix工具监控cpu、内存等系统资源占用率

    1)使用 sar -u 命令监控cpu使用 $ sar -u 5 5 12:21:15 %usr %sys %wio %idle 12:21:20 54 15 13 19 12:21:25 41 18 ...

  3. Solaris 10 系统维护

    作者:田逸([email]sery@163.com[/email]) 相信很多人和我有类似的想法:要是solaris 10安装配置完以后把它扔到某个位置再也不用管它,那该有多好.当然,这只是我们的一厢 ...

  4. The Complete List of MIME Types

    本文转载于https://www.sitepoint.com/web-foundations/mime-types-complete-list/点击打开链接 The Complete List of ...

  5. android px pd sp区别,【求助】我用北京索莱宝质粒小量提取试剂盒提的质粒,电泳图...

    我是质粒提取新手.目的是最终做细胞转染.最近小提了几次,5ml的DH5a液里提取的质粒,每个样品100ul,实验室没有微量紫外,只好忍痛吸取50ul稀释成1ml上普通紫外测OD值.OD260=0.07 ...

  6. libevent学习笔记 一、基础知识

    一.libevent是什么 libevent是一个轻量级的开源的高性能的事件触发的网络库,适用于windows.linux.bsd等多种平台,内部使用select.epoll.kqueue等系统调用管 ...

  7. init()函数何时运行?

    本文翻译自:When is the init() function run? I've tried to find a precise explanation of what the init() f ...

  8. Side Window Filtering 论文笔记

    引言 Side Window Filtering是上了数字图像处理这门课后看的第二篇论文,这是一篇2019年发表的论文,提出的技术方法也相对比较新.由于我对CV方面涉猎不多,所以看的时候比较懵,似懂而 ...

  9. Solaris 中文命令

    Solaris/Linux 命令手册 1. 系统 # passwd:修改口令 # exit:退出系统 2. 文件 # cp:复制文件或目录,参数:-a递归目录,-i覆盖确认 # mv:改名移动 # r ...

  10. 优秀网页翻译:一个智能旋钮:DIY haptic input knob: BLDC motor + round LCD

    一个智能旋钮:DIY haptic input knob: BLDC motor + round LCD 智能旋钮 硬件 设计 智能旋钮视图 演示视频 3D CAD 建立一个你自己的? 基础PCB 屏 ...

最新文章

  1. 基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测,目标追踪,卷积神经网络
  2. awk5.0 — awk模式之一
  3. 重大布局!北京大学,落子上海!
  4. 大自然创作的分形艺术
  5. 设计模式10——flyweight模式
  6. 网易笔试——混合颜料
  7. 多目标优化算法_【实验室论文】基于多种群协同演化的约束多目标优化算法
  8. sed文本处理常见用法
  9. js 中动态添加成员对象与数组或map转换(成员字段含有.)
  10. 注意!这些行为均涉嫌科研不端!
  11. VMware vSphere Documentation(产品文档)
  12. JAVA简单的SWING及AWT
  13. 课程、问题-利用mincemeat编写简单的MapReduce程序-by小雨
  14. 数据结构之王道视频中留下的问题
  15. 以太坊 ERC EIP是什么
  16. paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型
  17. 数据采集与清洗基础习题(四)Pandas初体验,头歌参考答案
  18. GBase8a数据库中表的comment信息
  19. The transaction timeout is larger than the maximum value allowed by the broker
  20. 专用计算机房属于中危险等级,普通住宅属哪种危险等级的灭火器配置场所

热门文章

  1. MySQL的基本操作(五)
  2. 3个月测试员自述:4个影响我职业生涯的重要技能
  3. php im即时消息,im即时通讯php
  4. 老男孩教育Linux50期远程控制连接
  5. 路由器设置成交换机步骤
  6. 制作QQ会员页面导航
  7. 【Prometheus】PrometheusGrafana 监控
  8. 人人都在谈的 “数据驱动” 到底是什么?你确认自己做的是数据驱动吗?
  9. Chemistry Methods | Image2SMILES+: Transformer-Based Molecular Optical Recognition Engine
  10. Kubernetes版本对接对象存储几种方案