Codeforces Round #598 (Div. 3) C. Platforms Jumping

#pragma GCC optimize(3)
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=2e3+5;
const int mod=998244353;
int n,m,d;
int a[N],c[N];
int main()
{
    scanf("%d%d%d",&n,&m,&d);
    int sum=0;
    for(int i=1; i<=m; i++)
        scanf("%d",&a[i]),sum+=a[i];
    int x=n-sum;
    if(ceil(x*1.0/(d-1))>m+1)printf("NO
");
    else
    {
        int k=ceil(x*1.0/(m+1))+1;
        int t;
        int l=0,p=1;
        while(l<n+1)
        {
            if(p>m)break;
            if(x==0)t=1;
            else t=min(x+1,k);
            x-=(t-1);
            for(int i=l+t;i<l+t+a[p];i++)
                c[i]=p;
            l=l+t+a[p]-1;
            p++;
        }
        cout<<"YES"<<endl;
        for(int i=1;i<n;i++)
            printf("%d ",c[i]);
        printf("%d
",c[n]);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/liuquanxu/p/11797864.html