首页 > 代码库 > CodeForces 767B The Queue
CodeForces 767B The Queue
模拟。
情况有点多,需要仔细。另外感觉题目的$tf$有点不太对......而且数据水了。
$0$ $5$ $2$
$2$
$0$ $5$
这组数据按照题意的话答案可以是$2$和$4$,但是好多错的答案能$AC$。
#pragma comment(linker, "/STACK:1024000000,1024000000")#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<vector>#include<map>#include<set>#include<queue>#include<stack>#include<ctime>#include<iostream>using namespace std;typedef long long LL;const double pi=acos(-1.0);void File(){ freopen("D:\\in.txt","r",stdin); freopen("D:\\out.txt","w",stdout);}template <class T>inline void read(T &x){ char c = getchar(); x = 0; while(!isdigit(c)) c = getchar(); while(isdigit(c)) { x = x * 10 + c - ‘0‘; c = getchar(); }}LL INF=0x7FFFFFFF;LL ts,tf,t;int n;LL s[100010];int main(){ INF=INF*INF; INF=INF*2; scanf("%lld%lld%lld",&ts,&tf,&t); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lld",&s[i]); if(n==0) { printf("%lld\n",ts); return 0; } if(s[1]>ts) { printf("%lld\n",ts); return 0; } LL need=INF,idx=-1,last=ts,tmp; last=max(last,s[1])+t; for(int i=2;i<=n;i++) { if(s[i]==s[i-1]) { last=max(last,s[i])+t; continue; } if(s[i-1]<=tf) { tmp=last+t; if(tmp<=tf&&tmp-s[i-1]<need) idx=s[i-1],need=tmp-s[i-1]; } if(s[i]-1<=tf) { tmp=max(s[i]-1,last)+t; if(tmp<=tf&&tmp-(s[i]-1)<need) idx=s[i]-1,need=tmp-(s[i]-1); } if(last>=s[i-1]&&last<s[i]) { tmp=last+t; if(tmp<=tf&&tmp-last<need) idx=last,need=tmp-last; } last=max(last,s[i])+t; } if(s[1]!=0) { tmp=ts+t; if(0<=tf) { if(tmp<=tf&&tmp-0<need) idx=0,need=tmp-0; } tmp=max(s[1]-1,ts)+t; if(s[1]-1<=tf) { if(tmp<=tf&&tmp-(s[1]-1)<need) idx=s[1]-1,need=tmp-(s[1]-1); } } tmp=last+t; if(s[n]<=tf) { if(tmp<=tf&&tmp-s[n]<need) idx=s[n],need=tmp-s[n]; } if(last<=tf) { if(tmp<=tf&&tmp-last<need) idx=last,need=tmp-last; } printf("%lld\n",idx); return 0;}
CodeForces 767B The Queue
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。