3433: [Usaco2014 Jan]Recording the Moolympics
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 137 Solved: 89
[Submit][Status][Discuss]
Description
Being a fan of all cold-weather sports (especially those involving cows), Farmer John wants to record as much of the upcoming winter Moolympics as possible. The television schedule for the Moolympics consists of N different programs (1 <= N <= 150), each with a designated starting time and ending time. FJ has a dual-tuner recorder that can record two programs simultaneously. Please help him determine the maximum number of programs he can record in total.
给出n个区间[a,b).有2个记录器.每个记录器中存放的区间不能重叠.
求2个记录器中最多可放多少个区间.
Input
* Line 1: The integer N.
* Lines 2..1+N: Each line contains the start and end time of a single program (integers in the range 0..1,000,000,000).
Output
* Line 1: The maximum number of programs FJ can record.
Sample Input
0 3
6 7
3 10
1 5
2 8
1 9
INPUT DETAILS: The Moolympics broadcast consists of 6 programs. The first runs from time 0 to time 3, and so on.
Sample Output
OUTPUT DETAILS: FJ can record at most 4 programs. For example, he can record programs 1 and 3 back-to-back on the first tuner, and programs 2 and 4 on the second tuner.
HINT
Source
题解:(呵呵哒我会告诉你我的第一反应是网络流?)
其实仔细看看后发现还是个贪心,只不过现在是两个容器= =,然后就是经典的右边界排序后O(n)乱搞了
1 /************************************************************** 2 Problem: 3433 3 User: HansBug 4 Language: Pascal 5 Result: Accepted 6 Time:0 ms 7 Memory:304 kb 8 ****************************************************************/ 9 10 var 11 i,j,k,l,m,n,ans,l1,l2:longint; 12 a:array[0..10000,1..2] of longint; 13 procedure swap(var x,y:longint); 14 var z:longint; 15 begin 16 z:=x;x:=y;y:=z; 17 end; 18 procedure sort(l,r:longint); 19 var i,j,x,y:longint; 20 begin 21 i:=l;j:=r;x:=a[(l+r) div 2,2]; 22 repeat 23 while a[i,2]<x do inc(i); 24 while a[j,2]>x do dec(j); 25 if i<=j then 26 begin 27 swap(a[i,1],a[j,1]); 28 swap(a[i,2],a[j,2]); 29 inc(i);dec(j); 30 end; 31 until i>j; 32 if i<r then sort(i,r); 33 if l<j then sort(l,j); 34 end; 35 36 begin 37 readln(n); 38 for i:=1 to n do readln(a[i,1],a[i,2]); 39 sort(1,n); 40 for i:=1 to n do 41 begin 42 if (a[i,1]>=l1) then 43 begin 44 l1:=a[i,2]; 45 inc(ans); 46 end 47 else if (a[i,1]>=l2) then 48 begin 49 l2:=a[i,2]; 50 inc(ans); 51 end; 52 if l1<l2 then swap(l1,l2); 53 end; 54 writeln(ans); 55 readln; 56 end.