zoukankan      html  css  js  c++  java
  • 贪心数列构造——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]<<" ";
    }
  • 相关阅读:
    2020-08-20
    2020-08-19
    2020-08-14
    2020-08-13
    使用numpy实现机器学习模型
    分治法学习
    2020-08-09
    2020-08-02
    四月是你的谎言下载
    新博客
  • 原文地址:https://www.cnblogs.com/zsben991126/p/11002143.html
Copyright © 2011-2022 走看看