标签:codeforces 贪心
题意:
m只鬼要来 你需要在鬼来的时候点起至少r根蜡烛 每根蜡烛点亮需要耗时1s并且持续亮ts 不能同时点多根蜡烛 问最少需要多少蜡烛
思路:
贪心即可 每当鬼来之前保证r根蜡烛亮着 用一个队列维护点蜡烛的时间 如果出现“不能点亮足够r根蜡烛”或者“鬼来的时候蜡烛有些熄灭了不如r根”则判定为失败
代码:
#include<cstdio> #include<iostream> #include<cstring> #include<string> #include<algorithm> #include<map> #include<set> #include<vector> #include<queue> #include<cstdlib> #include<ctime> #include<cmath> using namespace std; typedef unsigned long long ULL; #define M 100010 int n,t,r; int x[M],qu[M],L,R; int can(){ L=R=0; for(int i=1;i<=n;i++){ while(L<R&&qu[L]+t<x[i]) L++; int need=r-(R-L); if(need>0&&R&&x[i]-qu[R-1]-1<need) return -1; while(need){ qu[R++]=x[i]-need; need--; } while(L<R&&qu[L]+t<x[i]) L++; if(R-L<r) return -1; } //for(int i=0;i<R;i++) printf("%d\n",qu[i]); return R; } int main(){ scanf("%d%d%d",&n,&t,&r); for(int i=1;i<=n;i++) scanf("%d",&x[i]); printf("%d\n",can()); return 0; }
Codeforces 508C Anya and Ghosts
标签:codeforces 贪心
原文地址:http://blog.csdn.net/houserabbit/article/details/43269959