[CF1264B] Beautiful Sequence - 构造,贪心

Posted mollnn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CF1264B] Beautiful Sequence - 构造,贪心相关的知识,希望对你有一定的参考价值。

Description

给你 (a)(0)(b)(1)(c)(2)(d)(3),要求排成一个长度为 (a+b+c+d) 的数列,相邻两个差的绝对值为 (1),并输出任一方案。

Solution

分别构造首位置为 (0,1,2,3) 的情况,对于每个位置,尽量先贪该位 (-1),不满足的话贪该位 (+1)

能绕开各种特判做这道题,还是挺优雅的 ??

#include <bits/stdc++.h>
using namespace std;

#define int long long

int a[6],b[6];

signed main() {
    ios::sync_with_stdio(false);
    for(int i=1;i<=4;i++) cin>>a[i];
    for(int k=1;k<=4;k++) {
        for(int i=1;i<=4;i++) b[i]=a[i];
        int ind=k;
        vector<int> v;
        v.push_back(ind);
        if(b[ind]==0) continue;
        b[ind]--;
        while(1) {
            if(b[ind-1]) {
                --ind;
                b[ind]--;
                v.push_back(ind);
            }
            else if(b[ind+1]) {
                ind++;
                b[ind]--;
                v.push_back(ind);
            }
            else break;
        }
        if(v.size()==a[1]+a[2]+a[3]+a[4]) {
            cout<<"YES"<<endl;
            for(int i=0;i<v.size();i++) cout<<v[i]-1<<" ";
            return 0;
        }
    }
    cout<<"NO";
}

以上是关于[CF1264B] Beautiful Sequence - 构造,贪心的主要内容,如果未能解决你的问题,请参考以下文章

[暑假集训--数位dp]cf55D Beautiful numbers

CF1093D Beautiful Graph

「CF55D」Beautiful numbers

CF55D Beautiful numbers

CF1264F Beautiful Fibonacci Problem

CF D. Beautiful numbers (数位dp)