会场安排问题
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
4
-
描述
-
学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。
原题了链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=14
和HDU 11 页有题差不多,但这题要以结束时间排序。
AC代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=10000+5;
struct Node
{
int start,endd;
} a[maxn];
bool cmp(Node x,Node y)
{
return x.endd<y.endd;
}
int main()
{
int T;
ios::sync_with_stdio(false);
cin.tie(0);
cin>>T;
while(T--)
{
int n;
cin>>n;
for(int i=0; i<n; i++)
cin>>a[i].start>>a[i].endd;
sort(a,a+n,cmp);
int ans=1;
int p=0;
for(int i=1; i<n; i++)
{
if(a[i].start>a[p].endd)
{
ans++;
p=i;
}
}
cout<<ans<<endl;
}
return 0;
}
标程代码:
#include<stdio.h>
#include <vector>
#include<algorithm>
#include<math.h>
using namespace std;
struct activ
{
int begin;
int end;
};
bool cmp( activ a,activ b)
{
return a.end<b.end;
}
int main()
{
//freopen("1.txt","r",stdin);
int n;
scanf("%d",&n);
while (n--)
{
int m;
scanf("%d",&m);
vector<activ> vec;
for(int i=0;i<m;i++)
{
activ a;
scanf("%d%d",&a.begin,&a.end);
vec.push_back(a);
}
sort(vec.begin(),vec.end(),cmp);
int count=vec.size();
int k=0;
for (int i=1;i<vec.size();i++)
{
if(vec[i].begin <= vec[k].end)
count--;
else k=i;
}
printf("%d\n",count);
}
return 0;
}