1664: [Usaco2006 Open]County Fair Events 参加节日庆祝

时间:2022-05-08
本文章向大家介绍1664: [Usaco2006 Open]County Fair Events 参加节日庆祝,主要内容包括1664: [Usaco2006 Open]County Fair Events 参加节日庆祝、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

1664: [Usaco2006 Open]County Fair Events 参加节日庆祝

Time Limit: 5 Sec  Memory Limit: 64 MB

Submit: 255  Solved: 185

[Submit][Status][Discuss]

Description

Farmer John has returned to the County Fair so he can attend the special events (concerts, rodeos, cooking shows, etc.). He wants to attend as many of the N (1 <= N <= 10,000) special events as he possibly can. He's rented a bicycle so he can speed from one event to the next in absolutely no time at all (0 time units to go from one event to the next!). Given a list of the events that FJ might wish to attend, with their start times (1 <= T <= 100,000) and their durations (1 <= L <= 100,000), determine the maximum number of events that FJ can attend. FJ never leaves an event early.

有N个节日每个节日有个开始时间,及持续时间. 牛想尽可能多的参加节日,问最多可以参加多少. 注意牛的转移速度是极快的,不花时间.

Input

* Line 1: A single integer, N.

* Lines 2..N+1: Each line contains two space-separated integers, T and L, that describe an event that FJ might attend.

Output

* Line 1: A single integer that is the maximum number of events FJ can attend.

Sample Input

7 1 6 8 6 14 5 19 2 1 8 18 3 10 6 INPUT DETAILS: Graphic picture of the schedule: 11111111112 12345678901234567890---------这个是时间轴. -------------------- 111111 2222223333344 55555555 777777 666 这个图中1代表第一个节日从1开始,持续6个时间,直到6.

Sample Output

4 OUTPUT DETAILS: FJ can do no better than to attend events 1, 2, 3, and 4.

HINT

Source

Silver

题解:一个考得烂了的贪心,很经典的最多不向交区间问题而已

 1 /**************************************************************
 2     Problem: 1664
 3     User: HansBug
 4     Language: Pascal
 5     Result: Accepted
 6     Time:28 ms
 7     Memory:1008 kb
 8 ****************************************************************/
 9  
10 var
11    i,j,k,l,m,n:longint;
12    a:array[0..100005,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];y:=a[(l+r) div 2,1];
22                repeat
23                      while (a[i,2]<x) or ((a[i,2]=x) and (a[i,1]>y)) do inc(i);
24                      while (a[j,2]>x) or ((a[j,2]=x) and (a[j,1]<y)) 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 begin
36      readln(n);
37      for i:=1 to n do readln(a[i,1],a[i,2]);
38      for i:=1 to n do a[i,2]:=a[i,1]+a[i,2]-1;
39      sort(1,n);l:=0;
40      for i:=1 to n do if a[i,1]<>a[l,1] then
41          begin
42               inc(l);
43               a[l,1]:=a[i,1];
44               a[l,2]:=a[i,2];
45          end;
46      n:=l;l:=0;k:=0;
47      for i:=1 to n do
48          if a[i,1]>l then
49             begin
50                  inc(k);
51                  l:=a[i,2];
52             end;
53      writeln(k);
54      readln;
55 end.