Codeforces508 C. Anya and Ghosts(贪心)
Posted live4m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces508 C. Anya and Ghosts(贪心)相关的知识,希望对你有一定的参考价值。
题意:
解法:
由于点燃r个灯至少需要r的时间,
因此如果灯的持续时间t<r,那么一定无解,否则一定有解.
有解情况下,对于每个鬼a[i],优先将灯放在距离鬼最近的地方即可.
开一个队列维护每个灯的放置时间,
对于每个a[i],将过期的灯删掉,
假设距离r个灯还缺x个灯,那么就在[a[i]-x+1,a[i]]放x个灯即可.
复杂度O(n*r).
code:
#include<bits/stdc++.h>
// #define MULTI_CASE
#define SYNC_OFF
#define PI pair<int,int>
// #define int long long
using namespace std;
// const int mod=998244353;
const int mod=1e9+7;
const int maxm=2e6+5;
int a[maxm];
int m,t,r;
void solve(){
cin>>m>>t>>r;
// cout<<m<<' '<<t<<' '<<r<<endl;
if(t<r){//无解
cout<<-1<<endl;return ;
}
for(int i=1;i<=m;i++)cin>>a[i];
sort(a+1,a+1+m);
queue<int>q;
int ans=0;
for(int i=1;i<=m;i++){
while(q.size()&&q.front()+t-1<a[i])q.pop();
int need=r-q.size();
for(int j=a[i]-need+1;j<=a[i];j++){
q.push(j);
ans++;
}
}
cout<<ans<<endl;
}
void Main(){
#ifdef MULTI_CASE
int T;cin>>T;while(T--)
#endif
solve();
}
void Init(){
#ifdef SYNC_OFF
ios::sync_with_stdio(0);cin.tie(0);
#endif
#ifndef ONLINE_JUDGE
freopen("../in.txt","r",stdin);
freopen("../out.txt","w",stdout);
#endif
}
signed main(){
Init();
Main();
return 0;
}
以上是关于Codeforces508 C. Anya and Ghosts(贪心)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 525E Anya and Cubes 中途相遇法
Codeforces508 E. Arthur and Brackets(括号匹配,贪心)
Codeforces508 D. Tanya and Password(有向图欧拉路)
Codeforces 714 C. Sonya and Queries (思维)