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

codeforces 589F:贪心

时间:2016-01-22 00:06:11      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

每盘菜都要吃到,而且吃的时间是一样

我们按照区间右端点从小到大排序,排在前面的是要优先满足的

假如1号区间是[l,r],2号区间在r之后还有选择,所以1号先考虑

二分一下答案判断一下就好

#include"cstdio"
#include"queue"
#include"cmath"
#include"stack"
#include"iostream"
#include"algorithm"
#include"cstring"
#include"queue"
#include"map"
#include"set"
#include"vector"
#define ll long long
#define mems(a,b) memset(a,b,sizeof(a))

using namespace std;
const int MAXN = 205;
const int MAXE = 10050;
const int INF = 9999999;

struct node{
    int l,r;
}seg[MAXN];
int vis[MAXE];
int n;
bool cmp(node a,node b){
    return a.r<b.r;
}

bool judge(int x){
    mems(vis,0);
    for(int i=0;i<n;i++){
        int cnt=0;
        for(int j=seg[i].l;j<seg[i].r;j++){

            if(cnt==x) break;
            if(!vis[j])  vis[j]=1,cnt++;
        }
        if(cnt<x) return false;
    }
    return true;
}

int main(){
    int low=0,high=INF,mid;
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d%d",&seg[i].l,&seg[i].r);
    sort(seg,seg+n,cmp);
    int ans=0;

    while(low<=high){
        mid=(low+high)>>1;
        if(judge(mid)){
            ans=mid;
            low=mid+1;
        }
        else high=mid-1;
    }
    cout<<ans*n<<endl;
    return 0;
}

 

codeforces 589F:贪心

标签:

原文地址:http://www.cnblogs.com/luxiaoming/p/5149583.html

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