Codeforces 767B

CodeForces B题解析
本文解析了CodeForces上的一道贪心算法题目,通过分析每个人的最佳到达时间,计算出最小等待时间,并更新服务开始时间,最终找到无需排队的服务时间。

http://codeforces.com/problemset/problem/767/B

一个贪心的问题,考虑每一个来的人,那么最好的到达时间就是比这个人早1min,然后判断这个到底的时间所用的等待时间和之前保存的等待时间哪个少就保存哪个,每次判断后,要改变开始服务的时间(因为第一个到达的人可能晚于最早服务时间)。最后,如果最终的服务时间还在截止时间之前的话,那么就选这个时间,去了不用排队

#include<bits/stdc++.h>
using namespace std;
int main(){
long long ts,te,t,n,ans,wt=1e12+7,a;//开始服务时间,结束服务时间,服务时长,人数,
cin>>ts>>te>>t>>n;
for(int i=0;i<n;i++){
cin>>a;
if(a&&a+t<=te){//因为是早于这个人1分钟,如果这个人0时刻来的,就不可以
if(max(ts,a-1)<=te-t && ts-a+1<wt){//因为这个人到的时间可能比ts要晚,所以取其中大的那个,
wt=ts-a+1;ans=min(a-1,ts);
}
ts=max(ts,a)+t;//改变开始服务时间
}

}
if(ts<=te-t)
ans=ts;
cout<<ans<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值