首页 > 其他 > 详细

b_aw_区间(贪心)

时间:2020-09-24 17:46:59      阅读:47      评论:0      收藏:0      [点我收藏+]

给定 n 个区间 [ai,bi]和 n 个整数 ci。
你需要构造一个整数集合 Z,使得?i∈[1,n],Z 中满足ai≤x≤bi的整数 x 不少于 ci 个。
求这样的整数集合 Z 最少包含多少个数。

思路
对所有线段按右端点升序排列,因为在满足条件的情况下,尽量放后面的数"容错能力"更强

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5+5;
struct node {
    int l,r,c;
} A[N];
bool cmp(node& a, node& b) {
    return a.r<b.r;
}
int main() {
    std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int n,ans=0,vis[n+1]; cin>>n;
    memset(vis, false, sizeof vis);
    for (int i=0; i<n; i++) cin>>A[i].l>>A[i].r>>A[i].c;
    sort(A, A+n, cmp);

    for (int i=0; i<n; i++) {
        int l=A[i].l, r=A[i].r, need=A[i].c;
        for (int j=l; j<=r; j++) if (vis[j]) need--; //如果已经放了数,则需求-1
        if (need>0) for (int j=r; j>=l && need>0; j--) if (!vis[j]) {
            need--, vis[j]=1, ans++;
        }
    }
    cout<<ans;
    return 0;
}

b_aw_区间(贪心)

原文:https://www.cnblogs.com/wdt1/p/13724927.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!