“是的。”
“那你幹什麼呢?”
“看世界盃呀,笨蛋!”
“@#$%^&*%...”
確實如此,世界盃來了,球迷的節日也來了,估計很多ACMer也會拋開電腦,奔向電視了。
作爲球迷,一定想看盡量多的完整的比賽,當然,作爲新時代的好青年,你一定還會看一些其它的節目,比如新聞聯播(永遠不要忘記關心國家大事)、非常6+7、超級女生,以及王小丫的《開心辭典》等等,假設你已經知道了所有你喜歡看的電視節目的轉播時間表,你會合理安排嗎?(目標是能看盡量多的完整節目)
5
思路:可以用數組解出。先將結束時間從小到大排序,接着將開始時間與結束時間相比,大於則數量加一,下面是AC代碼
#include<iostream>
#include<algorithm>
using namespace std;
int a[101],b[101];
int main()
{
int s,e;
int n;
while(cin>>n&&n)
{
int num=1;
for(int i=0; i<n; i++)
{
cin>>a[i]>>b[i];
}
for(int i=0; i<n; i++)
{
for(int j=i; j<n; j++)
{
if(b[i]>b[j])
{
swap(a[i],a[j]);
swap(b[i],b[j]);
}
}
}
s=a[0];e=b[0];
for(int i=1; i<n; i++)
{
if(a[i]>=e)
{
num++;
e=b[i];
}
}
cout<<num<<endl;
}
return 0;
}
另外還可以用結構體,思路差不多:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct show
{
int s;
int e;
}a[105];
bool cmp(show a,show b)
{
return a.e < b.e;
}
int main()
{
int n;
while(cin>>n&&n)
{
int num=0;
int time=0;//排序後的第一個節目必然作爲目標結果的第一個節目
for(int i=0;i<n;i++)
cin>>a[i].s>>a[i].e;
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
{
if(a[i].s>=time)//後一個節目在前一個節目結束之後開始
{
num++;
time=a[i].e;//更新現在的時間
}
}
cout<<num<<endl;
}
}