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 (思维)

codeforces 653C C. Bear and Up-Down(乱搞题)

Codeforces Round #485 (Div. 1) C. AND Graph