刷题——hdu 6180 Schedule
来源:互联网 发布:js获取自定义属性 编辑:程序博客网 时间:2024/06/06 15:01
/*
!!!!!这真心想不到还能这么写:
http://blog.csdn.net/jaihk662/article/details/77489061
对于开始时间和终止时间,看成两个点,每个点用1(开始时间),-1(终止时间)标记
先按点的大小排序,大小相同的按标记大小排序(终止时间在开始时间前面)
本题除了要求最少机器外还要求最少机器下每个机器运行时间的总和,用两个数组记录每个机器的开始时间和结尾时间
int sum=0,ans=0;//sum记录每次加入点后的机器数,ans为当前最大机器数
for(int i=0;i<m;i++){
sum+=e[i].flage;
if(sum>ans){//若sum>ans需要加入了一个新机器,ans更新,同时更新这个机器的开始时间
ans=sum;
l[sum]=e[i].x;
}
}
结束时间的更新也一样,和就是res=sum(r[1...m]-l[1...m]);
*/
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
#define ll long long
#define MAXN 100100
struct node{ll x;int flage;};
bool cmp(node a,node b){
return a.x<b.x||a.x==b.x&&a.flage<b.flage;
}
node e[2*MAXN];
ll l[MAXN],r[MAXN];
int n,m;
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
ll s,d;
m=0;
for(int i=1;i<=n;i++){
scanf("%I64d %I64d",&s,&d);
e[m].x=s,e[m++].flage=1;
e[m].x=d,e[m++].flage=-1;
}
sort(e,e+m,cmp);
int sum=0,ans=0;
for(int i=0;i<m;i++){
sum+=e[i].flage;
if(sum>ans){
ans=sum;
l[sum]=e[i].x;
}
}
sum=0,ans=0;
for(int i=m-1;i>0;i--){
sum-=e[i].flage;
if(sum>ans){
ans=sum;
r[sum]=e[i].x;
}
}
ll res=0;
for(int i=1;i<=ans;i++){
res+=r[i]-l[i];
}
printf("%d %I64d\n",ans,res);
}
return 0;
}
!!!!!这真心想不到还能这么写:
http://blog.csdn.net/jaihk662/article/details/77489061
对于开始时间和终止时间,看成两个点,每个点用1(开始时间),-1(终止时间)标记
先按点的大小排序,大小相同的按标记大小排序(终止时间在开始时间前面)
本题除了要求最少机器外还要求最少机器下每个机器运行时间的总和,用两个数组记录每个机器的开始时间和结尾时间
int sum=0,ans=0;//sum记录每次加入点后的机器数,ans为当前最大机器数
for(int i=0;i<m;i++){
sum+=e[i].flage;
if(sum>ans){//若sum>ans需要加入了一个新机器,ans更新,同时更新这个机器的开始时间
ans=sum;
l[sum]=e[i].x;
}
}
结束时间的更新也一样,和就是res=sum(r[1...m]-l[1...m]);
*/
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
#define ll long long
#define MAXN 100100
struct node{ll x;int flage;};
bool cmp(node a,node b){
return a.x<b.x||a.x==b.x&&a.flage<b.flage;
}
node e[2*MAXN];
ll l[MAXN],r[MAXN];
int n,m;
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
ll s,d;
m=0;
for(int i=1;i<=n;i++){
scanf("%I64d %I64d",&s,&d);
e[m].x=s,e[m++].flage=1;
e[m].x=d,e[m++].flage=-1;
}
sort(e,e+m,cmp);
int sum=0,ans=0;
for(int i=0;i<m;i++){
sum+=e[i].flage;
if(sum>ans){
ans=sum;
l[sum]=e[i].x;
}
}
sum=0,ans=0;
for(int i=m-1;i>0;i--){
sum-=e[i].flage;
if(sum>ans){
ans=sum;
r[sum]=e[i].x;
}
}
ll res=0;
for(int i=1;i<=ans;i++){
res+=r[i]-l[i];
}
printf("%d %I64d\n",ans,res);
}
return 0;
}
阅读全文
0 0
- 刷题——hdu 6180 Schedule
- HDU 3572 — Task Schedule
- hdu-6180-Schedule
- HDU 6180 Schedule
- Hdu 6180 Schedule【贪心】
- hdu 6180 Schedule
- HDU-6180 Schedule
- HDU 6180 Schedule
- hdu 6180 Schedule 贪心
- hdu 6180 Schedule 贪心
- HDU 6180 Schedule(水题)
- HDU 3572——Task Schedule
- hdu 6180 Schedule (贪心)
- hdu 6180 Schedule (multiset)
- hdu 6180 Schedule(贪心)
- hdu 6180 Schedule(贪心 multiset)
- hdu 6180 Schedule(贪心)
- HDU 6180 Schedule(贪心)
- python实现-合并表记录
- 安卓SystemUI定制
- CentOS7.2搭建Go语言开发环境
- ubuntu16.04+gtx1080ti+caffe安装记录
- Java值传递和引用传递
- 刷题——hdu 6180 Schedule
- 微信小程序修改数组的值
- winform与静态页面中交互总结
- 51nod1073 约瑟夫环
- HDU4587 [TWO NODES] tarjan求无向图割顶
- Linux安装nodejs和npm
- for(:)遍历数组的一种方式
- 剑指offer-对称的二叉树
- 第八章 Testing Concurrent Applications(测试并发应用)【上】