題目背景
快noip了,yyy很緊張!
題目描述
現在各大oj上有n個比賽,每個比賽的開始、結束的時間點是知道的。
yyy認爲,參加越多的比賽,noip就能考的越好(假的)
所以,他想知道他最多能參加幾個比賽。
由於yyy是蒟蒻,如果要參加一個比賽必須善始善終,而且不能同時參加2個及以上的比賽。
輸入輸出格式
輸入格式:第一行是一個整數n ,接下來n行每行是2個正整數ai,bi(ai<bi),表示比賽開始、結束的時間。
一個整數最多參加的比賽數目。
輸入輸出樣例
3 0 2 2 4 1 3
2
說明
對於20%的數據,n≤10;
對於50%的數據,n≤1000;
對於70%的數據,n≤100000;
對於100%的數據,n≤1000000,0≤ai<bi≤1000000。
思路:
按照比賽的截止時間從小到大排序,記錄第一個比賽的截止時間,枚舉。(注意是最多隻能參加一個比賽……)
代碼(通俗易懂):
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct hahanoip {
int start, end;
}a[1000010];
int ans = 1, n, biaoji;
bool flag;
int hahacmp( hahanoip x, hahanoip y ) {
return x.end < y.end;
}
int main() {
scanf( "%d", &n );
for( int i = 1; i <= n; i++ )
scanf( "%d%d", &a[i].start, &a[i].end );
sort( a + 1, a + n + 1, hahacmp );
biaoji = a[1].end;
for( int i = 2; i <= n; i++ ) {
if( a[i].start >= biaoji ) {
ans++;
biaoji = a[i].end;
}
}
printf( "%d", ans );
return 0;
}