问题标题: 酷町堂:2838 活动安排 我傻了

0
0
已解决
武建豪
武建豪
中级天翼
中级天翼

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;

}


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;

    }

}

0
王文博
王文博
缔造者之神
缔造者之神

这道题目的代码有2处大错误:

1.bool cmp函数出现了问题。是x.e<y.e,x.s>y.s,这是一个错误;

2.是a[i].s>=end,只有大于才可以,不可能说有两个活动在同时进行。

望采纳!

我要回答