Schedule

Problem Description
There are N schedules, the i-th schedule has start time si and end time ei (1 <= i <= N). There are some machines. Each two overlapping schedules cannot be performed in the same machine. For each machine the working time is defined as the difference between timeend and timestart , where time_{end} is time to turn off the machine and timestart is time to turn on the machine. We assume that the machine cannot be turned off between the timestart and the timeend. 
Print the minimum number K of the machines for performing all schedules, and when only uses K machines, print the minimum sum of all working times.
 
Input
The first line contains an integer T (1 <= T <= 100), the number of test cases. Each case begins with a line containing one integer N (0 < N <= 100000). Each of the next N lines contains two integers si and ei (0<=si<ei<=1e9).
 
Output
For each test case, print the minimum possible number of machines and the minimum sum of all working times.
 
最近真的是愈发感觉自己很菜了   很伤感啊....
好不容易感觉有道签到题目可以写  结果写了两个小时  
WA了6发 T了2发  菜的一匹~~~
 
题意:工厂加工零件  问最少能用几个机器 和 机器所用的最少的时间
 
大概是不知道套路吧...等明天看别人的帖子  再学学新的套路
 
就是贪心  但是我只想到了 选择 间距最短的 用一个机器 这样能保证所用的时间最少  
 
但,但是我就是不会写  就很GG
 
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node
{
int st;//记录入点和出点
int flag;//如果是入点就+1,否则就-1
}s[*+]; int L[+],R[+];//记录机器的开始时间 和 结束时间 bool cmp(node a,node b)
{
if(a.st != b.st)
return a.st<b.st;//就是按照端点排序
else
return a.flag < b.flag;//因为区间结束的时候 和另一个区间开始的会重叠
//so 让区间先结束 然后在开始 这样子的吧
} void init()
{
memset(L,,sizeof(L));
memset(R,,sizeof(R));
}
int main ()
{
int t;
scanf("%d",&t);
while (t--)
{
init();
int n;
scanf("%d",&n);
int m=;
for(int i=;i<n;i++)
{
int st,e;
scanf("%d %d",&st,&e);
s[m].st = st,s[m++].flag=;//左端点+1
s[m].st = e,s[m++].flag=-;//右端点-1
}
sort(s,s+m,cmp);
int sum=,ans=;
for(int i=;i<m;i++)
{
sum+=s[i].flag;
if(sum>ans)
{
ans = sum;
L[sum] = s[i].st;
}
}
sum=,ans=;
for(int i=m-;i>=;i--)
{
sum-=s[i].flag;
if(sum>ans)
{
ans = sum;
R[sum] = s[i].st;
}
}
ll res=;
for(int i=;i<=ans;i++)
{
res += (R[i]-L[i]);
}//因为最后就是R-L 所以这里不用管 R[i]和L[i]是否对应
cout<<ans<<" "<<res<<endl;
}
}
 上面真的是 奇思妙想  
下面这个才是 真正模拟的吧   可惜 我贪心大概只会sort  会一丢丢priority_queue  没写过用set的题 果然见识太短
不好
 
#include<bits/stdc++.h>
using namespace std;
struct node{
int l,r;
bool operator <(const node a)const{
return l<a.l;
}
}seg[];
multiset<int>s;
multiset<int>::iterator it;
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
s.clear();
int n;
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%d %d",&seg[i].l,&seg[i].r);
}
int ans = ;//记录所用机器数量
long long res = ;//记录时间
sort(seg,seg+n);
for(int i=;i<n;i++)
{
it = s.upper_bound(seg[i].l);//寻找 >= seg[i].l 的r
if(it == s.begin())
{
ans++; //找不到 就重新开一个机器
res += seg[i].r - seg[i].l;
s.insert(seg[i].r);
continue;
}
it--;//这里就是离该i区间的起始点最近的 结束点
res += seg[i].r - *it;//把该i区间的结束点 接上上个结束点 这样就不用管 起始点在哪里了
s.erase(it);//把当前区间结束点删除
s.insert(seg[i].r);//重新更新
}
cout<<ans<<" "<<res<<endl;
}
}

hdu 6180 Schedule的更多相关文章

  1. 2017多校第10场 HDU 6180 Schedule 贪心,multiset

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6180 题意:给了一些任务的开始时间和终止时间,现在让我们安排k台及机器,让这些任务在k太机器上最小,并 ...

  2. HDU - 6180:Schedule(简单贪心)

    There are N schedules, the i-th schedule has start time s i  si and end time e i  ei (1 <= i < ...

  3. Schedule HDU - 6180 (multiset , 贪心)

    There are N schedules, the i-th schedule has start time si and end time ei (1 <= i <= N). Ther ...

  4. hdu 1534 Schedule Problem (差分约束)

    Schedule Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. hdu 6180贪心

    题意:有m个工程,一台机器在同一时间只能运行一个工程,告诉你每个工程的起始时间和结束时间,求出最少要多少个机器以及最小的机器总运行时间(机器开始了就不能停了,直到用完该台机器才停止). 题解:由于这里 ...

  6. HDU 3572 Task Schedule(拆点+最大流dinic)

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

  7. hdu 1150 Machine Schedule 最少点覆盖转化为最大匹配

    Machine Schedule Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  8. hdu 3572 Task Schedule 网络流

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

  9. hdu 1150 Machine Schedule 最少点覆盖

    Machine Schedule Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

随机推荐

  1. ansible-playbook剧本

    Playbooks 是一种简单的配置管理系统与多机器部署系统的基础, 非常适合于复杂应用的部署 由 yaml 语言编写, 运行过程中, ansible-playbook 命令根据自上而下的顺序依次执行 ...

  2. BUG笔记:Android原生浏览器不认负百分数margin致Foundation Orbit往右滑动动画出错

    一看这标题就知道无比蛋疼了是不?至少我从来不用安卓自带的浏览器... 发现这个bug的场景:万恶的Foundation,它的滚动图片插件Orbit在安卓自带浏览器下手指从左往右滑动时动画仍旧表现为从右 ...

  3. 读取Linux上图片

    /** * 读取图片 * @param path * @param response * @throws Exception */ public static void showImg(String ...

  4. vertx 从Tcp服务端和客户端开始翻译

    写TCP 服务器和客户端 vert.x能够使你很容易写出非阻塞的TCP客户端和服务器 创建一个TCP服务 最简单的创建TCP服务的方法是使用默认的配置:如下 NetServer server = ve ...

  5. PHP生成zip压缩包

    /* * $res = new MakeZip($dir,$zipName); *@ $dir是被压缩的文件夹名称,可使用路径,例 'a'或者'a/test.txt'或者'test.txt' *@ $ ...

  6. [py]编码-强力理解版

    py编码骨灰级总结 思路: python执行py文件步骤--py2/3定义变量时unicode差异 1,py2 py3执行py文件的步骤 2,py2 定义变量x='mao' 1.x='mao', # ...

  7. js绘制圆形时钟

    纯js制作圆形时钟 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  8. Leetcode: Repeated DNA Sequence

    All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...

  9. 定时器事件QtimerEvent 随机数 qrand Qtimer定时器

    QTimerEvent类:定时器事件.QObject的子类都可使用  int QObject::startTimer(int interval)[参数:毫秒][返回值:定时器整型编号]来开启一个定时器 ...

  10. liferay中数据库表的解析未完

    页面布局 1:表layout 主要的字段有: 字段 privateLayout 0表示的是公开的页面 字段 layoutId 如果在同一个社区中有很多的界面,layoutId表示各个界面,按照顺序排列 ...