# [BZOJ] 1620: [Usaco2008 Nov]Time Management 时间管理

## 1620: [Usaco2008 Nov]Time Management 时间管理

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 850  Solved: 539
[Submit][Status][Discuss]

## Description

Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. 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 effectively, 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.

## 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.

## Sample Input

4
3 5
8 14
5 20
1 16

INPUT DETAILS:

Farmer John has 4 jobs to do, which take 3, 8, 5, and 1 units of
time, respectively, and must be completed by time 5, 14, 20, and
16, respectively.

## Sample Output

2

OUTPUT DETAILS:

Farmer John must start the first job at time 2. Then he can do
the second, fourth, and third jobs in that order to finish on time.

Silver

一波排序，把死线从后往前排

=w=

## Code

 1 #include<cstdio>
2 #include<iostream>
3 #include<algorithm>
4 #define maxn 10000000
5 using namespace std;
6
7 struct job{
9 }list[maxn/1000];
10
11 int n;
12
13 int cnt[maxn];
14
15 bool cmp(const job &a,const job &b){
17 }
18
19 int main(){
20     scanf("%d",&n);
21
22     for(int i = 1;i <= n;i++)
24
25     sort(list+1,list+1+n,cmp);
26
27     for(int i = n;i >= 1;i--){
29         while(cnt[j] && j) j--;
31         int tmp = list[i].t;
32         while(tmp && j) cnt[j--] = 1,tmp--;
33     }
34
36     if(ans < 0) printf("-1");
37     else printf("%d",ans);
38 //    cout << ans;
39
40 //    for(int i = 1;i <= n;i++){
47 }