C. Platforms Jumping

http://codeforces.com/contest/1256/problem/C

#include <bits/stdc++.h>
//#include <queue>
//#include <cmath>
//#include <iostream>
//#include <unordered_map>

#define lson rt<<1
#define rson rt<<1|1
#define lowbit(x) ((x)&(-x))
#define mem(x,y) memset(x,y,sizeof(x))
#define pb push_back
#define INF 0x3f3f3f3f
#define ll long long
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;

const int mod=1e9+7;
const int N=1e3+9;


int a[N];
int c[N];
int ans[N];
int main()
{
    FAST_IO;


        mem(a,0);
        int n,d,m;
        cin>>n>>m>>d;
        int sum=0;
        for(int i=1;i<=m;i++) cin>>c[i],sum+=c[i];

        int us=0;
        int now=0;
        int cnt=1;
        int pos=0;
        while(1)
        {
            pos=now+d;
            if(pos>=n+1) break;
            for(int j=pos;j<=c[cnt]+pos-1;j++) a[j]=1;

            now=c[cnt]+pos-1;
            if(now>n+1)
            {
                break;
            }
            us+=c[cnt];
            cnt++;
            if(cnt>m) break;
        }

        if(now+d<n+1) cout<<"NO"<<endl;
        else
        {
            int cnt=1;
            int yu=sum-us;
            //cout<<yu<<endl;
            for(int i=n;i>=1;i--)
            {
                if(a[i]==0&&yu)
                {
                    a[i]=1;
                    yu--;
                }
            }
            cout<<"YES"<<endl;
            int num=0;
            for(int i=1;i<=n;i++)
            {
                if(a[i])
                {
                    ans[i]=cnt;
                    num++;
                    if(num>=c[cnt])
                    {
                        num=0;
                        cnt++;
                    }
                }
            }
            for(int i=1;i<=n;i++)cout<<ans[i]<<" ";
            cout<<endl;
        }


    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章