hdu 2037 今年暑假不AC

今年暑假不AC

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 27733    Accepted Submission(s): 14664


ios

Problem Description
「今年暑假不AC?」
「是的。」
「那你幹什麼呢?」
「看世界盃呀,笨蛋!」
「@#$%^&*%...」

確實如此,世界盃來了,球迷的節日也來了,估計不少ACMer也會拋開電腦,奔向電視了。
做爲球迷,必定想看盡可能多的完整的比賽,固然,做爲新時代的好青年,你必定還會看一些其它的節目,好比新聞聯播(永遠不要忘記關心國家大事)、很是6+七、超級女生,以及王小丫的《開心辭典》等等,假設你已經知道了全部你喜歡看的電視節目的轉播時間表,你會合理安排嗎?(目標是能看盡可能多的完整節目)
 

 

Input
輸入數據包含多個測試實例,每一個測試實例的第一行只有一個整數n(n<=100),表示你喜歡看的節目的總數,而後是n行數據,每行包括兩個數據Ti_s,Ti_e (1<=i<=n),分別表示第i個節目的開始和結束時間,爲了簡化問題,每一個時間都用一個正整數表示。n=0表示輸入結束,不作處理。
 

 

Output
對於每一個測試實例,輸出能完整看到的電視節目的個數,每一個測試實例的輸出佔一行。
 

 

Sample Input
12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0
 

 

Sample Output
5
 
 
簡單的貪心題。首先,將n組數據按照結束時間從小到大的順序排序,要想使看到的節目最多,則要求所看的節目時間儘可能少。因此排序以後從第一組開始計數,而後與下一組的開始時間相比較,若是比下一組開始的時間大則將下一組跳過,接着比較下一組,若是比下一組開始時間小,以這一組的結束時間與下面的比較,重複比較直至結束。
 
 1 #include <iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 #define N 105
 5 struct Time{
 6     int Ti_s;
 7     int Ti_e;
 8 }Ti[N];
 9 bool cmp(Time a,Time b)
10 {
11     if(a.Ti_e != b.Ti_e)
12         return a.Ti_e<b.Ti_e;
13     return a.Ti_s<b.Ti_s;
14 }
15 
16 int main()
17 {
18     int i, n, endtime, sum;
19     while(cin>>n && n)
20     {
21         for(i=0; i<n; i++)
22             cin>>Ti[i].Ti_s>>Ti[i].Ti_e;
23         sort(Ti,Ti+n,cmp);
24         sum = 1;
25         endtime = Ti[0].Ti_e;
26         for(i=1; i<n; i++)
27         {
28             if(endtime<=Ti[i].Ti_s)
29             {
30                 sum++;
31                 endtime = Ti[i].Ti_e;
32             }
33         }
34         cout<<sum<<endl;
35     }
36     return 0;
37 }
View Code
相關文章
相關標籤/搜索