zoukankan      html  css  js  c++  java
  • hdu 4982 贪心构造序列

    http://acm.hdu.edu.cn/showproblem.php?pid=4982

    给定n和k,求一个包含k个不相同正整数的集合,要求元素之和为n,并且其中k-1的元素的和为完全平方数

    枚举平方数,从1开始构造余下序列(贪心),需要特判最后剩下的一个数是否在之前的序列或者和n-m*m相同,然后就是++--不断判断能否返回true or false

    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cstring>
    #include <string>
    #include <queue>
    #include <map>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    #define RD(x) scanf("%d",&x)
    #define RD2(x,y) scanf("%d%d",&x,&y)
    #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
    #define clr0(x) memset(x,0,sizeof(x))
    typedef long long LL;
    const int maxn = 200001;
    int n,k;
    bool ok(int m,int s,int kk)
    {
        if(!s)
            return false;
        int i = 1;
        kk--;
        while(kk--){
            if(i == s)
                ++i;
            if(m <= i)
                return false;
            m -= i;
            ++i;
        }
        while(1){
            if(m < i)
                return false;
            if(m != s)
                return true;
            ++i,--m;
        }
        return false;
    }
    int main() {
    //	int _;RD(_);while(_--){
    //	    ;
    //	}
        while(~RD2(n,k)){
            int m = sqrt(n);
            bool flag = false;
            while(m >= 1){
                if(ok(m*m,n - m*m,k - 1)){
                    flag = true;
                    break;
                }
                m--;
            }
            if(flag)
                puts("YES");
            else
                puts("NO");
        }
    	return 0;
    }
    


  • 相关阅读:
    每日总结19
    每日博客
    每日博客
    每日博客
    每日博客
    今日收获
    python 基础学习
    python 基础学习
    python 基本语法学习
    【Rust】格式化Formatting
  • 原文地址:https://www.cnblogs.com/zibaohun/p/4046823.html
Copyright © 2011-2022 走看看