zoukankan      html  css  js  c++  java
  • 【POJ1083】 Moving Tables (并行的搬运)

    BUPT2017 wintertraining(15) #6E

    题意

    房间1和2,3和4,...,399和400共用一节走廊,有q次从房间li到ri的搬运桌子,一次搬运10分钟。两个搬运如果走廊有重叠部分,则必须一个结束后再执行另一个。求全部搬运所需最少的时间。

    题解

    对于一次搬运,我们可以求出它经过的走廊区间,给这些区间的每节走廊的经过次数都++。最少的总时间就是最大经过次数*10。
    这题贪心为什么不对呢?贪心的方法是根据区间右端点排序,右端点相同再按左端点排序。然后如果当前的左端点小于前一个的右端点则ans+=10。但是这种情况不一定需要ans+10,因为更前面的搬运也许不和当前区间重叠,因此可以和它并行。例如[1,2],[2,3],[3,4],贪心的话答案是30,但[1,2],[3,4]可以同时进行,所以正确答案是20。

    代码

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    int t,n,ans,v[300];
    int main() {
    	scanf("%d",&t);
    	while(t--){
    		memset(v,0,sizeof v);
    		ans=0;
    		scanf("%d",&n);
    		for(int i=1,l,r;i<=n;i++){
    			scanf("%d%d",&l,&r);
    			if(l>r)swap(l,r);
    			l=(l+1)/2;
    			r=(r+1)/2;
    			for(int j=l;j<=r;j++)v[j]++;
    		}
    		for(int i=1;i<=200;i++)ans=max(ans,v[i]);
    		printf("%d
    ",ans*10);
    	}
    	return 0;
    }
    
  • 相关阅读:
    七牛云李意扬:如何收集 Go 实时覆盖率丨ECUG Meetup 回顾
    OpenTelemetry 微服务链路追踪
    空接口
    安全规则集合
    采用最快回应
    Golang单元测试实战
    源码 kratos 配置热加载分析
    烟花 光影
    控制Repeater显示列数
    基本代码安全知识
  • 原文地址:https://www.cnblogs.com/flipped/p/6582834.html
Copyright © 2011-2022 走看看