码迷,mamicode.com
首页 > 其他好文 > 详细

[CF1264B] Beautiful Sequence - 构造,贪心

时间:2020-05-08 22:38:01      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:构造   back   int   cto   情况   sequence   lse   math   ios   

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 - 构造,贪心

标签:构造   back   int   cto   情况   sequence   lse   math   ios   

原文地址:https://www.cnblogs.com/mollnn/p/12853371.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!