CodeForces - 1256C (思惟+貪心)

題意

https://vjudge.net/problem/CodeForces-1256Chtml

有一條寬度爲n的河。河的左岸編號爲0,右岸編號爲n+1。河流上還有m個木製平臺,第i個平臺的長度爲ci(因此說第i個平臺佔據河流的ci個連續位置)。保證平臺長度的總和不超過n。ios

你正站在0(左岸),而且想到達右岸即n+1的位置。若是您站在位置x,則能夠跳到[x+1,x+d]範圍內的任何位置。可是, 你只能跳到木質平臺上( 即不能下水 )。例如,若是d=1,則只能跳到下一個位置(若是這個位置上有木製平臺)。您能夠假設單元格0和n+1屬於木製平臺。c++

您能夠將任意平臺向左或向右移動任意次數(也能夠不移動),只要它們彼此不重疊(但兩個平臺能夠挨在一塊兒)。也就是說你不能更改平臺的相對順序。spa

請注意,你應該先移動平臺再跳躍(一旦你出發後,你就不能再移動平臺了)。.net

例如,若是n=7,m=3,d=2和c=[1,2,1],這就是從左岸跳到右岸的方法之一:htm

思路

題目開始讀錯了,坑爹。注意每一個板子的順序是不能改變的,並且每一個板子都要用上。由於咱們的首要目標是到達n+1,因此貪心跳d步,但咱們也要考慮留給放板子的空位夠不夠,因此若是當前位置+d+未放板子的長度和-1<=n,那麼咱們要跳到當前位置+d;不然跳到n-未放板子長度和+1,在每次跳到的位置放板子,最後判斷可否跳到n+1。blog

代碼

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=2005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int main()
{
    std::ios::sync_with_stdio(false);
    int n,m,d;
    while(cin>>n>>m>>d)
    {
        int w[N],sum=0;
        for(int i=1; i<=m; i++)
        {
            cin>>w[i];
            sum+=w[i];
        }
        int s=0,t=1;
        int ans[N];
        memset(ans,0,sizeof(ans));
        int flag=0;
        while(s<=n)
        {
            //      cout<<"s:"<<s<<endl;

            if(s+d+sum-1<=n)
                s+=d;
            else
            {
                s=n-sum+1;
            }
            if(s>=n+1)
            {
                break;
            }
            //    cout<<s<<endl;
            if(t<=m)
            {
                for(int i=s; i<s+w[t]; i++)
                {
                    ans[i]=t;
                }
                s=s+w[t]-1;
                sum-=w[t];
                t++;
            }
            else
            {
                flag=1;
                break;
            }
        }
        if(flag)
        {
            cout<<"NO"<<endl;
        }
        else
        {
            cout<<"YES"<<endl;
            for(int i=1; i<=n; i++)
            {
                cout<<ans[i]<<" ";
            }
            cout<<endl;
        }
    }
    return 0;
}
相關文章
相關標籤/搜索