题意

    给n个工作的开始时间和结束时间 每个工作需要用机器来完成 让我们给这n个工作规划机器 规划出尽可能少机器数目 以及计算最少的机器时间(机器时间为机器使用的最终结束时间减去开始时间)

分析
这道题其实就是一个工作的开始结束形成了一个线段 让我们求多个线段不交叉不重叠拼接拼到一个方向上 拼合后 求最终剩下的线段方案数 和工作时间

所以这道题可以看出一个性质 那就是每次拍工作时 时根据上一个工作的结束时间 然后再在后面的工作开始时间里选择一个最近的 排上去
如果剩下的工作开始时间都比当前机器的结束时间小 那么就重新开新的机器
我们可以从头开始枚举点 如果这个点的开始时间在所有机器的结束时间里能找到个最近的结束时间 表示可以续上 那么我们就把这个工作的结束时间代替那个机器的结束时间 那么如何保证能找到那个点呢?
我们就需要对开始时间排序 保证当前处理的点 比他早开始的一定处理过了 尽可能地让当前点的开始时间可以接上前面结束的工作
*所以得到思路
用set维护机器个数
set中的值表示开的机器个数
每次遍历新规划时 就是取这个规划的开始点 看能否插在其中 如果可以就用新的结束点代替可以
插入位置的结束点
set中存的是每个规划的终点 表示这个规划目前机器的结束时间 如果可以继续插入表示可以代替
上次的结束时间 更新为新的结束时间
注意对于每一个新点 我们对这个点的开始时间二分 有两种情况
1 这个点能找到插入位置也就是有插入下界 那么范围会是第一个元素到最后一个元素
2 这个点找不到插入位置 那么会返回begin() 表示这个时候要开新机器
最后 set中的数量就是机器的个数
过程中可以计算间隔
插入就直接计算 上一个和当前点的终点之差 新点 直接计算差值*

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 100010;
struct node{int l,r;
}N[maxn];
bool cmp(node a,node b){return a.l<b.l||(a.l==b.l&&a.r<b.r);
}
multiset<int>ms;
multiset<int>::iterator it;
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&N[i].l,&N[i].r);sort(N+1,N+1+n,cmp);ll ans=0;for(int i=1;i<=n;i++){it = ms.upper_bound(N[i].l);if(it==ms.begin()){ans+=N[i].r-N[i].l;ms.insert(N[i].r);}else{it--;ans+=N[i].r-(*it);ms.insert(N[i].r);ms.erase(it);}}printf("%d %lld\n",ms.size(),ans);ms.clear();}return 0;
}

HDU-6180 Schedule相关推荐

  1. HDU 6180 2017 多校训练:Schedule

    题意: 和 51nod 1428 活动安排问题 一模一样,只不过还要求一个时间和 http://blog.csdn.net/jaihk662/article/details/77489061 如何求出 ...

  2. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

  3. hdu 3572 Task Schedule 网络流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3572 Our geometry princess XMM has stoped her study i ...

  4. HDU 3572 Task Schedule

    传送门 作业调度,这道题还真没想到能用网络流....乍一看跟背包问题差不多. 有N个作业,M个机器,每个作业给你一个耗费时间(时间段)以及最早开始时间和最晚完成时间(这两个是时间点),单位是天.一个作 ...

  5. HDU 4907 BestCoder3_1 Task schedule

    Task schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  6. hdu 3572 Task Schedule IPSA 最大流

    题意: 题目意思: 给出 N 件任务和 M台机器, 这N件任务都一个限制: 必须在 [S,E] 之间完成, 而且完成的时间不能超过 P. 一台机器每天只能做意见任务, 不过庆幸的是: 任务是可以拆分的 ...

  7. hdu 1150 Machine Schedule (经典二分匹配)

    //A组n人 B组m人 //最多有多少人匹配 每人仅仅有匹配一次 # include<stdio.h> # include<string.h> # include<alg ...

  8. 题解报告:hdu 4907 Task schedule

    Problem Description 有一台机器,并且给你这台机器的工作表,工作表上有n个任务,机器在ti时间执行第i个任务,1秒即可完成1个任务. 有m个询问,每个询问有一个数字q,表示如果在q时 ...

  9. HDU - 1150 Machine Schedule(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:现在有一个机器A和一个机器B,A机器有n种模式,B机器有m种模式,现在有k次工作需要完成,每次工作的信息为: id x y:编号为id,在A机器要用x模式完成,在B机器要 ...

  10. 【HDU 1150】Machine Schedule(二分图匹配)

    机器的不同模式为点,对于每个job,建两条边 A机器需要的模式<->B机器需要的模式. 问题转化为最小点覆盖,然后用二分图的最小点覆盖==最大匹配,用匈牙利算法解. #include &l ...

最新文章

  1. POJ 3687 拓扑排序
  2. 2019年第十届蓝桥杯 - 省赛 - C/C++大学A组 - A. 平方和
  3. 使用 Wireshark 对本地 socket 通信进行数据抓包
  4. UITableView 点击选中改变字体颜色并记录
  5. 【C语言简单说】十九:二维数组循环嵌套(1)
  6. 一文细数Vision transformer家族成员
  7. 天正暖通天圆地方在哪_2020位于太白山景区海拔3511米天圆地方景点就变成了很多人望而却步的地方_天圆地方-评论-去哪儿攻略...
  8. openjdk7的ImageIO.read()导致jvm异常crash
  9. 基于jquery.fixedheadertable 表格插件左侧固定 对齐
  10. 2020 Pwn2Own东京大赛落幕,Master of Pwn 诞生
  11. (BUG记录)使用迭代器安全的删除处于循环下集合中的元素
  12. [bzoj3223]Tyvj 1729 文艺平衡树
  13. ubuntu硬盘序列号怎么查询_Ubuntu16.04中查看硬盘的型号和读取速度
  14. ntfs磁盘格式是什么?NTFS如何读写Mac硬盘?
  15. C++面向对象程序设计(侯捷)笔记
  16. 项目管理工具之Kanban
  17. 计算机切换器鼠标反应慢,kvm切换器故障操作解决方法详解
  18. Tiled2Unity报错处理办法
  19. Unity - 使用Winform制作简易登录器
  20. 吉大计算机暑期学校,2014年大学生暑期学校活动第三轮通知

热门文章

  1. 在Windows XP下,安装VS 2010 Express For Windows Phone .
  2. C# 淘宝商品微信返利助手开发-(七)返利助手开发(5)如何将优惠券地址转为淘口令
  3. Oracle中5个核心Sql语句的基本构造:Select、Insert、Update、Delete和Merge
  4. Unhandled exception: org.springframework.beans.factory.BeanDefinitionStoreException
  5. 项目集成Spring Security
  6. Android 下拉式抽屉折叠动画
  7. mongoose 数据库设计千万要注意 Cast to [number] failed for value
  8. node 根据图片img url 获取 base64
  9. mysql5.1win7_免安装版mysql5.1.57在win7下成功配置
  10. centos7 network网络服务重启报错failed to start lsb