CodeForces - 767B

贪心,细节贼多,难受,开始数据就看错了,这里是不断更新主人公能被接待的时间,并在来的人前一分钟和能被接待的时间中取最小值

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long int ll;
ll ts,tf,m,bb,n,ans;
ll wt=1e12+5;
int main()
{
    scanf("%lld%lld%lld",&ts,&tf,&m);
    scanf("%lld",&n);
    for(int i=0; i<n; i++)
    {
        scanf("%lld",&bb);
        if(bb&&bb+m<=tf)//这个能被接待,不能是0,否则主人公来的时间就变成-1了
        {
            if(max(ts,bb-1)+m<=tf&&ts-bb+1<wt)//主人公能被接待,且等待时间更短
            {
                wt=ts-bb+1;//距离被接待还需多长时间
                ans=min(bb-1,ts);//寻找值以提前某人一分钟和最后接待时间最小的为标准
            }
            ts=max(ts,bb)+m;//如果来的人在他将被接待的时间前面,就以前一个人的接待结束的时间为标准更新接待时间,反之就以他来的时间为标准
        }
    }
    if(ts<=tf-m)//最后一个人结束还能再接待一个人,当然选这个
        ans=ts;
    printf("%lld\n",ans);
    return 0;
}

 

posted on 2017-04-09 10:07  发牌员  阅读(217)  评论(0)    收藏  举报

导航