问题标题: 酷町堂:2878 50分

0
0
已解决
龙舟
龙舟
高级光能
高级光能

#include<iostream>
#include<cmath>
#include<iomanip>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
struct c{
    int s;
    int e;
}a[110];
bool cmp(c x,c y){
    return x.e<y.e;
}
int main()
{
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++)
{
    cin>>a[i].s>>a[i].e;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++)
{
    if(a[i].e<a[i+1].s){
        sum+=a[i+1].s-a[i].e;
    }
}
cout<<sum;
return 0;
}
 

求改错!!


1
已采纳
丁海洋
丁海洋
中级守护
中级守护

这道题你的思路有点问题

你的cmp函数比较的是结束时间,而这道题你仔细读读会发现一句话:无论同时发过来多少请求,它都能同时处理。也就是说我们根本不用考虑选哪个,所以我们要比较的是开始时间,我们要先执行哪个。然后呢,我们需要一个变量ed来存下第一个变量的结束时间,然后用他后一个开始时间去与他比较(这时候也告诉我们for循环应从2开始),如果大于等于,根据题目要求的是求休息时间,我们就要用开始时间减去ed

然后就是ed他不能一直是第一个变量的结束时间,这样后面的肯定不对,所以ed要更新

那么怎么更新呢?

我们就这样考虑,如果当前结束时间是大于当前ed的,那么ed就要更新,即ed=a[i].r

祝AC

PS(我在首页也看到有老师录了微课,如果你还有错的,你可以看看)

 

0
0
0
0
王子逸
王子逸
新手天翼
新手天翼

我也是50,和你差不多

测试样例也过了

花不起测试点

0
吴庞茂旭
吴庞茂旭
资深光能
资深光能

你的头像好像是日本女子未婚是的状态,背着蝴蝶。

(P.S.:楼上点赞,楼下沙发(潜水惯用语))

0
张恩泽
张恩泽
高级天翼
高级天翼

这个排序要从起始时间开始从小到大排,你写错了

我要回答