Codeforces 767B

来源:互联网 发布:android 手机淘宝源码 编辑:程序博客网 时间:2024/06/11 14:28

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;
}

0 0