中级天翼
2838 活动安排
经验值:1200 时间限制:1000毫秒
题目描述 Description
在公司有一间会议室,时常被人拿出来安排活动。现在某一天里,公司有n个部门都想要使用这间会议室,并且都给出了自己的要使用的时间段。请问这间会议室最多能安排多少个活动?
输入描述 Input Description
第一行,一个整数,n(1≤n≤100)
接下来n行,第i行两个整数,sti edi,表示第i个活动开始于sti,终止于edi(sti<edi)
输出描述 Output Description
第一行是安排的第一个活动的开始时间和结束时间
第二行是最多能安排的活动数目
样例输入 Sample Input
3 1 2 1 3 2 4
样例输出 Sample Output
1 2 2
数据范围及提示 Data Size & Hint
如果第一个活动有多种安排方案,选择结束时间最早的那一个,结束时间相同的情况下选开始时间最早的
#include<iostream>
#include<string>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<cstring>
#include<sstream>
using namespace std;
struct f{
int s, e;
}a[300];
bool cmp(f x,f y){
if(x.e!=y.e) return x.e>y.e;
return x.s<y.s;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].e;
}
sort(a+1,a+1+n,cmp);
int end=0,cnt=0;
for(int i=1;i<=n;i++){
if(a[i].s<=end){
cnt++;
end=a[i].e;
}
}
cout<<a[1].s<<' '<<a[1].e<<endl;
cout<<cnt;
return 0;
}
新手光能
bool cmp(inf x,inf y){
if(x.e!=y.e) return x.e<y.e;
return x.s>y.s;
}
for(int i=1;i<=n;i++){
if(x<=a[i].s){
cnt++;
if(cnt==1) cout<<a[i].s<<" "<<a[i].e<<endl;
x=a[i].e;
}
}