Bzoj 1620: [usaco Nov] Time Management

Source: Internet
Author: User
Description

Ever the maturing businessman, Farmer John realizes that he must manage his time was tively. he has n jobs conveniently numbered 1 .. N (1 <= n <= 1,000) to accomplish (like milking the cows, cleaning the barn, mending the fences, and so on ). to manage his time when tively, he has created a list of the jobs that must be finished. job I requires a certain amount of time t_ I (1 <= t_ I <= 1,000) to complete and furthermore must be finished by time s_ I (1 <= s_ I <= 1,000,000 ). farmer John starts his day at time t = 0 and can only work on one job at a time until it is finished. even a maturing businessman likes to sleep late; help Farmer John determine the latest he can start working and still finish all the jobs on time.

N jobs, the time required for each job, and the deadline to be completed, ask when to start. Input

* Line 1: A single INTEGER: N

* Lines 2. n + 1: line I + 1 contains two space-separated integers: t_ I and s_ I output

* Line 1: the latest time farmer John can start working or-1 If Farmer John cannot finish all the jobs on time.

Question:

The start time is monotonically updated. If it can be completed from time t, it can be completed from time t' <t.

So we can divide it into two TBS.

After T is determined, perform the top deadline Task Based on greed and simulate it.

Note that there is no solution output-1. Bytes

End.

Code:

#include<cstdio>#include<cstring>#include<algorithm>#include<queue>//by zrt//problem:using namespace std;int n;struct N{    int t,s;    friend bool operator < (N a,N b){        return a.s<b.s;    }}a[1005];int minn=1<<30;bool judge(int start){    int t=start;    for(int i=1;i<=n;i++){        if(t+a[i].t>a[i].s) return 0;        else t+=a[i].t;    }    return 1;}int main(){    #ifdef LOCAL    freopen("in.txt","r",stdin);    freopen("out.txt","w",stdout);    #endif    scanf("%d",&n);    for(int i=1;i<=n;i++){        scanf("%d%d",&a[i].t,&a[i].s);        minn=min(minn,a[i].s);    }    sort(a+1,a+n+1);    int l=0,r=minn;    if(!judge(0)){        puts("-1");        goto ed;    }    while(r-l>1){        int m=(l+r)>>1;        if(judge(m)){            l=m;        }else r=m;    }    printf("%d\n",l);    ed:;return 0;}

Bzoj 1620: [usaco Nov] Time Management

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.