Codeforces Round #288 (Div. 2)
Anya因为很喜欢看鬼片,所以鬼要来她家做客。每个鬼到来的时候必须要有k根蜡烛亮着。Anya点亮一根蜡烛要一秒,每根蜡烛持续m秒,问她最少要几根蜡烛
1.如果蜡烛的持续时间小于鬼来需要的蜡烛,则不能成功
2.每次都在鬼来的前一秒钟开始点蜡烛,用优先队列模拟,如果队列中元素个数小于需要的蜡烛,则添加蜡烛;如果对头元素小于鬼来的时间减去蜡烛持续的时间,说明这根蜡烛已经熄灭了,就把它出队。每次要点蜡烛就判断那些点是否已经点过蜡烛了
#include<bits/stdc++.h>
const int maxn=610;
using namespace std;
set<int> s;
set<int> k;
int main()
{
int m,t,r;
int x;
int f[maxn]={0};
cin>>m>>t>>r;
for(int i=0;i<m;++i){
scanf("%d",&x);
f[x]=1;
}
if(t<r) printf("-1\n");
else{
for(int i=0;i<maxn;++i){
if(f[i]){
while(!s.empty()&&*s.begin()<i-t) s.erase(s.begin());
int j=1;
while(s.size()<r&&j<=t){
if(!k.count(i-j)) s.insert(i-j),k.insert(i-j),j++;
}
}
}cout<<k.size()<<endl;
}
return 0;
}