可惜没如果=_=
时光的河入海流

题目链接在这里:Problem - G - Codeforces

这题涉及到gcd,然后要把n拆分成k个数,这k个不同的数gcd最大。我们从一般的构造开始想,如果这k个数为1,2,...k,加起来比n大了,那一定就构造不出来。然后我们可以知道这个gcd一定是n的一个因数,所以我们可以枚举这个因数(这个操作在涉及gcd的问题中非常常见),剩下的就是1,2...k-1,n-sigma(1~k-1).

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 typedef long long LL;
 4 LL n,k,m;
 5 LL g,an;
 6 bool flag;
 7 inline LL mx(LL x,LL y){return x>y?x:y;}
 8 int main(){
 9     freopen ("g.in","r",stdin);
10     freopen ("g.out","w",stdout);
11     LL i,j,zt;
12     scanf("%lld%lld",&n,&k);
13     flag=false;
14     m=(1+k)*k/2;
15     an=0;
16     if (2*n/k<k+1){printf("-1");return 0;}
17     for (i=1;i*i<=n;i++){
18         if (n%i!=0)continue;
19         g=n/i;
20         if (i>=m) {an=g;break;}
21         if (g>=m) {an=i;}
22         else break;
23     }
24     //cout<<an<<endl;
25     if (an==0) printf("-1");
26     else{
27         for (i=1;i<k;i++) printf("%lld ",an*i);
28         printf("%lld",an*(k+n/an-m));
29     }
30     return 0;
31 }

 

posted on 2021-07-28 22:34  珍珠鸟  阅读(43)  评论(0编辑  收藏  举报