zoukankan      html  css  js  c++  java
  • 555 div3 D. N Problems During K Days*

      题意:给定n和k  判断是否能用一串长度为k的a来表示   a的和为n

    且满足

    a[i]<a[i+1]

    a[i+1]<=2*a[i]

    显然是等差和等比的关系

    注意特判  

    8 3  和4 2 时无解 

    然后从后往前补即可

    #include<bits/stdc++.h>
    using namespace std;
    //input by bxd
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);--i)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m)
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define ll long long
    #define pb push_back
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    #define inf 0x3f3f3f3f
    ll n,k;
    const int N=1e6;
    ll a[N];
    int main()
    {
        cin>>n>>k;
        ll temp=(1+k)*k/2;
    
        if(n<temp||n==8&&k==3||n==4&&k==2)return cout<<"NO",0;
    
        n-=temp;
        ll t=n/k;
        n-=t*k;
        
        rep(i,1,k)
        a[i]=i+t;
        while(n)
        {
            repp(i,k,2)//显然不可能再补1了  
            {
                if(a[i]+1<=a[i-1]*2)a[i]++,n--;
                else break;
                if(!n)break;
            }
        }
        cout<<"YES"<<endl;
        rep(i,1,k)
        printf(i==1?"%lld":" %lld",a[i]);
    
        return 0;
    }
    View Code
  • 相关阅读:
    Yarn
    easyui
    eclipse-android
    js-小技能 そうですか
    sql server 时间处理
    上传文件
    时间 & 时间戳 之间 转换
    JDIC
    Spring 定时器
    映射
  • 原文地址:https://www.cnblogs.com/bxd123/p/10876004.html
Copyright © 2011-2022 走看看