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