Educational Codeforces Round 20 c Maximal GCD

原创 2018年04月17日 17:25:14
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

You are given positive integer number n. You should create such strictly increasing sequence of k positive numbers a1, a2, ..., ak, that their sum is equal to n and greatest common divisor is maximal.

Greatest common divisor of sequence is maximum of such numbers that every element of sequence is divisible by them.

If there is no possible sequence then output -1.

Input

The first line consists of two numbers n and k (1 ≤ n, k ≤ 1010).

Output

If the answer exists then output k numbers — resulting sequence. Otherwise output -1. If there are multiple answers, print any of them.

Examples
Input
Copy
6 3
Output
Copy
1 2 3
Input
Copy
8 2
Output
Copy
2 6
Input
Copy
5 3
Output
Copy
-1

题目大意:

给一个数n,然后让你找到一个k个数的严格递增的序列。使得k个数的和等于n,而且这k个数的最大公约数最大


思路:

num=k*(k+1)/2,首先判断num与n的大小,如果大于n,那么就输出-1.这里的num会爆long long.所以需要两个判断条件.

之后从1到sqrt(n)进行扫描,先判断能否整除。如果i>=num,那么就找到了这个序列,1,2,3,。。。k+i-num.然后这个序列乘以(n/i)输出结束.如果i始终小于num,那么就记录1,2,3,。。。k+(n/i)-num这个序列,然后这个序列乘以i,每次扫描时,都要更新这个序列。最后输出最后更新的这个序列

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const int N =2e5+5;
ll g[1000005];//因为一个内存,wa了1发。
int main()
{
    ll n,k;
    cin>>n>>k;
    ll num=(k+1)*k/2;//超ll,wa 1发
    if(2*sqrt(n)<k)
    {

        cout<<-1<<endl;
        return 0;
    }
     if(num>n)
       {

        cout<<-1<<endl;
        return 0;
       }
    int flag=0;
    for(int i=1;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            if(i>=num)//如果i>=num,那么就找到了这个序列,1,2,3,。。。k+i-num.然后这个序列乘以(n/i),输出结束。
            {
                ll s2=n/i;
                flag=1;
                for(int j=1;j<k;j++)
               {
                 cout<<j*s2<<' ';
               }
                cout<<(k+i-num)*s2<<endl;
                break;
            }
            else
            if(n/i>=num)//如果i小于num,那么就记录1,2,3,。。。k+(n/i)-num这个序列,然后这个序列乘以i,每次扫描时,都要更新这个序列
            {
                ll s1=n/i;
                for(int j=1;j<k;j++)
               {
                 g[j]=j*i;
               }
               g[k]=(k+s1-num)*i;
            }
        }
    }
    if(!flag)
    {
        for(int j=1;j<=k;j++)
               {
                 cout<<g[j]<<' ';
               }
                cout<<endl;
    }
    return 0;
}

Educational Codeforces Round #41 (D&E)

ABC就是暴力暴力暴力哇……D. Pair of Lines: 给出平面上n个点的坐标,问是否存在两条直线使得这n个点中的每一个都至少位于一条直线上。两条直线,首先要确定其中一条直线,然后将不在这条直...
  • NPU_SXY
  • NPU_SXY
  • 2018-04-05 10:38:15
  • 37

解题报告: Educational Codeforces Round 24 A,B,C

A、题目链接 题意: n个人,有人有文凭,有人有证书,有的人什么也没有,其中有证书的人数量为有文凭的人的k倍,我们称有文凭或者有证书的人为有奖状的人,已知有奖的人不超过一半,询问最多有多少人获奖。...
  • qq_32570675
  • qq_32570675
  • 2017-07-01 11:26:35
  • 233

解题报告:Educational Codeforces Round 24 D,E,F

D、题目链接 题意: 给定一个长度为n的序列,给定一个数a,询问是否存在数b满足从前往后遍历序列,数b出现的次数始终大于等于数a出现的次数。 思路: 把每两个数a之间看做一个筛选阶段,每次筛选掉之...
  • qq_32570675
  • qq_32570675
  • 2017-07-01 14:07:43
  • 287

Educational Codeforces Round 36 (Rated for Div. 2) 题解

先总结一波 第一次打cf,感觉还不错,题目做得挺顺手。虽然开始30min才想起来有这么个比赛来着。。 纪念一下第一次的rank,话说题真是水 这是大概还剩下5min的时候截的,实际可能会...
  • jpwang8
  • jpwang8
  • 2018-01-13 23:16:24
  • 366

Educational Codeforces Round 27

A 题意:把2 * n个人分成两组,使得无论两组的人怎么进行比赛 第一组的人始终都要保持全赢,如果两个人能力值相等两人都可以赢 思路:排序后只要保证n + 1个人的能力值大于第n个人的能力值即可 #i...
  • sasuke__
  • sasuke__
  • 2017-08-23 10:35:32
  • 237

Educational Codeforces Round 34 (Rated for Div. 2)

这是我这个弱渣第一次正儿八经打codeforce的比赛 只水出来A题一道签到题,B题和C题只是有思路 但是并没有写出来 至于D E F就根本没有看 可能没有挑战的欲望吧 以后就算做不出来也会想一想思路...
  • hdsdogge
  • hdsdogge
  • 2017-12-13 16:57:49
  • 92

Educational Codeforces Round 38 题解

总结 A由于阅读水平不够看了好久才看懂。这次的edu比之前我做的一场难了,D其实很简单但我往另一个方向想了,所以没有做出来,倒是E很快就切了。 这是最终成绩: 题解 A. Word...
  • qq_33229466
  • qq_33229466
  • 2018-02-18 12:51:47
  • 172

Educational Codeforces Round 38 (Rated for Div. 2)A. Word Correction

题目链接:http://codeforces.com/contest/938/problem/A题目大意:规定字母a,e,i,o,u,y为元音字母,给我们长度为n的字符串s,如果s中有连续两个元音字母...
  • qq_39471929
  • qq_39471929
  • 2018-02-17 11:21:28
  • 37

Educational Codeforces Round 42 E 贪心

题目链接 题意: 数轴上有三种类型的点:B型点、R型点、P型点。 你可以连接任意两个点,连接的代价是两个点的距离,即坐标之差。 而最终希望达到的条件是: 如果去除所有B型点,R型点和P型...
  • WuBaizhe
  • WuBaizhe
  • 2018-04-11 11:57:41
  • 52
收藏助手
不良信息举报
您举报文章:Educational Codeforces Round 20 c Maximal GCD
举报原因:
原因补充:

(最多只允许输入30个字)