zoukankan      html  css  js  c++  java
  • CF1157D N Problems During K Days(简单构造)

    题目

    题目

    原数据是水成啥样了,(<longrightarrow <=,>=longrightarrow <=,)这也能过 (hack)后身败名裂

    做法

    简单的贪心吧

    开始先填上(1)~(k),然后如果能全部(+1)就加:这样一定能为后面的构造创造出更多的可能((2)倍的限制)

    后面就找到能填的最小的位置反复填就行了

    Code

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const LL maxn=1e6+9;
    LL n,k;
    LL a[maxn];
    int main(){
    	cin>>n>>k;
    	LL ret(0);
    	for(LL i=1;i<=k;++i) a[i]=i,ret+=a[i];
    	if(ret>n){
    		puts("NO"); return 0;
    	}
    	LL tmp(n-ret);
    	if(tmp>=k){
    		LL lun(tmp/k);
    		for(LL i=1;i<=k;++i) a[i]+=lun;
    		ret+=lun*k;
    	}
    	LL up(0);
    	while(true){
    		tmp=n-ret;
    		if(!tmp) break;
    		LL now(std::max(k-tmp+1,up));
    		if(a[now-1]*2<a[now]+1){
    			LL f(0);
    			for(LL j=now+1;j<=k;++j){
    				if(a[j-1]*2>=a[j]+1){
    					f=j;
    					break;
    				}
    			}
    			if(!f){
    				puts("NO"); return 0;
    			}
    			up=f;
    			for(LL j=f;j<=k;++j) ++a[j];
    			ret+=k-f+1;
    		}else{
    			for(LL i=now;i<=k;++i) ++a[i];
    			ret+=k-now+1;
    		}
    	}	
    	puts("YES");
    	for(LL i=1;i<=k;++i) cout<<a[i]<<' ';
    	return 0;
    }
    
  • 相关阅读:
    1、jquery_属性和选择器
    sqlserver2012——SqlCommand创建对象的三种方法
    数据库视频
    插件源码
    打包部署
    SpringCloud-Demo
    SpringCloud
    分布式管理
    security-oauth2
    ES的使用
  • 原文地址:https://www.cnblogs.com/y2823774827y/p/10778811.html
Copyright © 2011-2022 走看看