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个节日每个节日有个开始时间,及持续时间. 牛想尽可能多的参加节日,问最多可以参加多少. 注意牛的转移速度是极快的,不花时间.
* 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.
* Line 1: A single integer that is the maximum number of events FJ can attend.
就是这里的,想象成许多线段,如果相交,若当前线段右端比以前线段右端小,那么就赋值为现在那条线段,因为这样只会更优。
如果不想交,直接ans+1
划水
1 #include<cstring>
2 #include<cmath>
3 #include<algorithm>
4 #include<iostream>
5 #include<cstdio>
6
7 #define N 10007
8 using namespace std;
9 inline int read()
10 {
11 int x=0,f=1;char ch=getchar();
12 while(ch<‘0‘||ch>‘9‘){if (ch==‘-‘) f=-1;ch=getchar();}
13 while(ch<=‘9‘&&ch>=‘0‘)
14 {
15 x=(x<<3)+(x<<1)+ch-‘0‘;
16 ch=getchar();
17 }
18 return x*f;
19 }
20
21 int n,ans;
22 struct Node
23 {
24 int x,y;
25 }a[N];
26
27 bool cmp(Node x,Node y)
28 {
29 return x.x<y.x;
30 }
31 int main()
32 {
33 n=read();
34 for (int i=1;i<=n;a[i].x=read(),a[i].y=a[i].x+read()-1,i++);
35 sort(a+1,a+n+1,cmp);
36
37 for (int i=1,r=0;i<=n;i++)
38 {
39 if (a[i].x>r) ans++,r=a[i].y;
40 else if (a[i].y<r) r=a[i].y;
41 }
42 printf("%d",ans);
43 }