Goffi and Squary Partition

题意:
给你N和K,问能否将N拆分成K个互不相同的正整数,并且其中K-1个数的和为完全平方数.
PS:这道题目原来是要求输出一种可行方案的,所以下面题解是按照输出方案的思想搞的。
分析:
我们尝试枚举那个完全平方数S,然后看能否将他拆分为 K-1 个数,并且不用到N-S
这一步可以用贪心+一次调整来搞定。为了保证 K-1个数都不同,我们尝试尽量用 1,2,3...这些连续自然数来构造,如果 N-S 出现在这些数中,那么将 N-S 移除,再新加一个数。如果这样都不能拆分成 K-1 个数,那么这个 S 肯定不行。
现在考虑已经用上述方法拆分了,我们需要判断这个拆分是否可行。会产生问题的只有最后一个数,这个数可能和 N-S 一样,也可能出现在之前的序列。如果是出现在之前的序列,那么这个拆分也是不靠谱的。如果和 N-S 一样,那么分两种情况
1.	N-S 曾出现在之前的序列,那么显然这个拆分也是不靠谱的
2.	N-S 比倒数第二个数大,对于这种我们可以通过调整最后一个数和倒数第二个数的大小,来使得这个拆分成立,假设最后一个数为 a,倒数第二个为 b,只要 a-1,b+1 就好了。当然如果 a-1 = b+1 这个拆分也是不靠谱的这道题目就这样搞定了,其实没必要找所有的完全平方数,只要找小于 N 与 N 最接近的完全平方数就好了。
注:以上“题意”及“分析”来自杭电OJ。AC代码:
 1 #include<stdio.h>
 2 #include<math.h>
 3 int n,k;
 4 int judge(int num)
 5 {
 6     int p,i,q,sum=0,ans=0;
 7     p=num*num;//记录的是比n小的最小的平方数
 8     q=n-p;//q记录的是除k-1个数后的那个数
 9     if(q==0)
10         return 0;
11     for(i=0;i<k-2;i++)//用 1,2,3...K-2这些连续自然数来构造
12     {
13         ans++;
14         if(ans==q)
15             ans++;
16         sum+=ans;
17     }
18     if(sum+q>n)
19         return 0;
20     int cha=n-q-sum;
21     if(cha<=ans)
22         return 0;
23     ans++;
24     if(q==ans||q==ans+1)
25     {
26         if(cha==q)
27             return 0;
28     }
29     return 1;
30 }
31 int solve()
32 {
33     int m=sqrt(n*1.0);//m记录的是比n小的最小的平方数开平方的值
34     for(int i=m;i>=1;i--)
35     {
36         if(judge(i))//从M开始枚举直到找到符合条件的
37             return 1;
38     }
39     return 0;
40 }
41 int main()
42 {
43     while(scanf("%d%d",&n,&k)!=EOF)
44     {
45         if(solve())
46             printf("YES\n");
47         else
48             printf("NO\n");
49     }
50     return 0;
51 }
 
时间: 2024-10-24 09:29:28

Goffi and Squary Partition的相关文章

HDU 4982 Goffi and Squary Partition(推理)

HDU 4982 Goffi and Squary Partition 思路:直接从完全平方数往下找,然后判断能否构造出该完全平方数,如果可以就是yes,如果都不行就是no,注意构造时候的判断,由于枚举一个完全平方数,剩下数字为kk,构造的时候要保证数字不重复 代码: #include <cstdio> #include <cstring> #include <cmath> int n, k; bool judge(int num) { int yu = num * n

hdu 4982 Goffi and Squary Partition

Goffi and Squary Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1442 Accepted Submission(s): 479 Problem Description Recently, Goffi is interested in squary partition of integers. A set

hdu4982 Goffi and Squary Partition (DFS解法)

BestCoder Round #6 B http://acm.hdu.edu.cn/showproblem.php?pid=4982 Goffi and Squary Partition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 308    Accepted Submission(s): 106 Problem Descrip

[BestCoder Round #6] hdu 4982 Goffi and Squary Partition(构造)

Goffi and Squary Partition Problem Description Recently, Goffi is interested in squary partition of integers. A set X of k distinct positive integers is called squary partition of n if and only if it satisfies the following conditions: the sum of k p

HDOJ 4982 Goffi and Squary Partition

Goffi and Squary Partition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 374    Accepted Submission(s): 145 Problem Description Recently, Goffi is interested in squary partition of integers.

HDU 4982 Goffi and Squary Partition(BestCoder Round #6 1002)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4982 解析: 题意: 给你N和K,问能否将N拆分成K个互不相同的正整数,并且其中K-1个数的和为完全平方数     实际上,一拿到题目,我先想了下这里会不会存在负数或者0,后来经过几次华丽丽的WA之后发现,这题确实不用考虑到非正数.但是还是想吐槽一下,这个题目的意思也有点儿太不明晰了...     再说回题目来,我们枚举所有的完全平方数i*i,然后看能否将他拆成k-1个数,并且用不到n-i*i.所以

【HDOJ】4982 Goffi and Squary Partition

题意就是整数划分,选出和为n的K个整数,其中K-1个数的和为完全平方数S.选择整数时需要从1,2,3..连续选择,当选择整数与n-S相等时,需要跳过n-S,即选择n-S+1.如此选择K-2个数,从而可确定第K-1个数,若该数已经出现(小于或等于K-2),则划分失败:若第K-1个数不等于n-S,则肯定划分成功,否则K-1个数若等于n-S.即需要通过将第K-2个数+1,同时第K-1个数-1得到正确的划分,并且需要保证调整后第K-2个数仍小于第K-1个数,因此,两数之间的距离至少大于2. 1 #inc

hdu 4982 Goffi and Squary Partition (枚举)

//给出n和k,求k个不同的正整数,使其中k-1个数能组成平方数,k个数的和为n.有解输出YES,无解输出NO. # include <stdio.h> # include <string.h> # include <algorithm> # include <math.h> using namespace std; int n,k; bool judge(int num) { int yy=num*num;//k-1个数相加 int kk=n-yy; if

hdu 4859(思路题)

Goffi and Squary Partition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1171    Accepted Submission(s): 402 Problem Description Recently, Goffi is interested in squary partition of integers.