CodeForces - 767B

it2022-05-22  53

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

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

 

转载于:https://www.cnblogs.com/Wangwanxiang/p/6683822.html


最新回复(0)