码迷,mamicode.com
首页 > 其他好文 > 详细

CodeForces 822C Hacker, pack your bags!

时间:2017-09-23 12:22:27      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:区间   amp   long   else   cost   force   name   for   ack   

题意

给出一些闭区间(始末+代价),选取两段不重合区间使长度之和恰为x且代价最低

思路

相同持续时间的放在一个vector中,内部再对起始时间排序,从后向前扫获取对应起始时间的最优代价,存在minn中,对时间 i 从前向后扫,在对应的k-i中二分找第一个不重合的区间,其对应的minn加上 i 的cost即为出发时间为 i 时的最优解

代码

#include<bits/stdc++.h>
using namespace std;
int n, k;
struct EVE{
    int st,ed,val;
    EVE(){
    }
    EVE(int a,int b, int c){
        st = a, ed = b, val = c;
    }
};
int f,t,c;
vector<EVE> v[200200];
vector<int> minn[200200];
int tmp[200200];
bool cmp(EVE a, EVE b){
    return a.st<b.st;
}
int main(){
    scanf("%d%d",&n,&k);
    for(int i = 0;i<n;i++){
        scanf("%d%d%d",&f,&t,&c);
        if(t-f+1 >= k) continue;
        v[t-f+1].push_back({f,t,c});
    }
    for(int i = 1;i<=k;i++) sort(v[i].begin(),v[i].end(),cmp);
    for(int i = 1;i<=k;i++){
        for(int j = v[i].size()-1;j>=0;j--){
            if(j==v[i].size()-1) tmp[j]=v[i][j].val;
            else tmp[j]=min(v[i][j].val,tmp[j+1]);
        }
        for(int j = 0;j<v[i].size();j++){
            minn[i].push_back(tmp[j]);
        }
    }
    long long ans = 1e12;
    for(int i = 1;i<=k;i++){
        if(v[k-i].empty()) continue;
        for(int j = 0;j<v[i].size();j++){
            int ed = v[i][j].ed;
            long long cost = v[i][j].val;
            int le = 0, ri = v[k-i].size()-1;
            if(v[k-i][ri].st<=ed) continue;
            int mid = le+ri>>1;
            while(le<ri){
                mid = le+ri>>1;
                if(v[k-i][mid].st<=ed) le = mid+1;
                else ri = mid;
            }
            ans = min(ans, cost+minn[k-i][le]);
        }
    }
    if(ans == 1e12) printf("-1");
    else printf("%I64d",ans);
    return 0;
} 

 

CodeForces 822C Hacker, pack your bags!

标签:区间   amp   long   else   cost   force   name   for   ack   

原文地址:http://www.cnblogs.com/Invisible-full-moon/p/7580618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!