贪心数列构造——cf1157D

Posted zsben991126

tags:

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

一开始将数列设置为0 1 2 3 4 5 6.。。

然后从左到右遍历,每位不够就增加即可

#include<bits/stdc++.h>
using namespace std;
#define maxn 200005
#define ll long long 
ll a[maxn],n,k;
int main()
    cin>>n>>k;
    ll sum=(0+k-1)*k/2;
    if(sum>n)
        puts("NO");
        return 0;
    
    a[0]=-1;
    
    for(int i=1;i<=k;i++)
        int now=a[i-1]+1;
        int add=(n-sum)/(k-i+1);
        if(now+add>2*a[i-1] && i>=2)
            add=2*a[i-1]-now;
        sum+=add*(k-i+1);
        a[i]=now+add;
        if(i>=2 && a[i]>2*a[i-1] || sum>n)
            puts("NO");
            return 0;
        
    
    if(sum!=n)
        puts("NO");
        return 0;
    
    
    puts("YES");
    for(int i=1;i<=k;i++)
        cout<<a[i]<<" ";

 

以上是关于贪心数列构造——cf1157D的主要内容,如果未能解决你的问题,请参考以下文章

[CF1264B] Beautiful Sequence - 构造,贪心

B.构造一个简单的数列(贪心)

B.构造一个简单的数列(贪心)

B.构造一个简单的数列(贪心)

构造题 贪心cf1041E. Tree Reconstruction

CF 680D 贪心+构造.