#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;
}
求改错!!
这道题你的思路有点问题
你的cmp函数比较的是结束时间,而这道题你仔细读读会发现一句话:无论同时发过来多少请求,它都能同时处理。也就是说我们根本不用考虑选哪个,所以我们要比较的是开始时间,我们要先执行哪个。然后呢,我们需要一个变量ed来存下第一个变量的结束时间,然后用他后一个开始时间去与他比较(这时候也告诉我们for循环应从2开始),如果大于等于,根据题目要求的是求休息时间,我们就要用开始时间减去ed
然后就是ed他不能一直是第一个变量的结束时间,这样后面的肯定不对,所以ed要更新
那么怎么更新呢?
我们就这样考虑,如果当前结束时间是大于当前ed的,那么ed就要更新,即ed=a[i].r
祝AC
PS(我在首页也看到有老师录了微课,如果你还有错的,你可以看看)