【codeforces 803C】Maximal GCD
【题目链接】:http://codeforces.com/contest/803/problem/C
【题意】
给你一个数字n;一个数字k;
让你找一个长度为k的序列;
要求这个长度为k的序列的所有数字的和为n;
且这k个数字的最大公因数最大;
【题解】
key:这个最大公因数一定是n的因子!
/*
设最后选出来的k个数字为
a[1],a[2]...a[k];
这些数字的最大公因数为g
g*b[1],g*b[2],...g*b[k]
n=g*b[1]+g*b[2]+...+g*b[k];
这里g必然是n的因子;
且
n/g==b[1]+b[2]+..+b[k]>=1+2+3...+k···①
(1+2+3..+k 是最小的满足严格递增的长度为k的序列)
构造最后的答案为
1*g,2*g,3*g...(k-1)*g以及n-(1+2+3..k-1)*g
前k-1项肯定是递增的;
而由①式可知
n-g*(1+2+3..+k)>=0
则
最后一项=n-g*(1+2+3..+k-1)>=g*k
所以也是单调递增的;
这里只要保证①式成立,就肯定能找到解了
(1+2+...+k如果大于1e10直接输出无解就好,这样防止爆LL)
有解就从大到小枚举n的因子,找到第一个符合的输出就好
*/
【Number Of WA】
0
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 110;
LL n,k;
vector <LL> v1,v2;
void out(LL g)
{
LL temp = 0;
for (int i = 1;i <= k-1;i++)
cout <<i*g<<' ',temp+=i*g;
cout << n-temp<<endl;
exit(0);
}
int main()
{
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf not use
cin >> n >> k;
if (k>=1e6)
return cout << -1 << endl,0;
LL sumk = (1+k)*k/2;
LL ma = sqrt(n);
for (LL g = 1;g <= ma;g++)
if (n%g==0)
v1.pb(g),v2.pb(n/g);
int len = v2.size();
rep1(i,0,len-1)
{
LL x = v2[i];
if (n/x>=sumk)
out(x);
}
len = v1.size();
rep2(i,len-1,0)
{
LL x = v1[i];
if (n/x>=sumk)
out(x);
}
cout << -1 << endl;
return 0;
}
【codeforces 803C】Maximal GCD的更多相关文章
- 【Codeforces 664A】 Complicated GCD
[题目链接] 点击打开链接 [算法] gcd(a,a+1) = 1 所以当a = b时,答案为a,否则为1 [代码] #include<bits/stdc++.h> using names ...
- 【codeforces 340B】Maximal Area Quadrilateral
[题目链接]:http://codeforces.com/problemset/problem/340/B [题意] 给你n个点,让你在这里面找4个点构成一个四边形; 求出最大四边形的面积; [题解] ...
- 【Codeforces 1034A】Enlarge GCD
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 设原来n个数字的gcd为g 减少某些数字之后 新的gcd肯定是g的倍数 即gx 我们可以枚举这个x值(x>=2) 看看原来的数字里面有多 ...
- 【CodeForces 624D】Array GCD
题 You are given array ai of length n. You may consecutively apply two operations to this array: remo ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【UOJ#33】【UR#2】树上GCD 有根树点分治 + 容斥原理 + 分块
#33. [UR #2]树上GCD 有一棵$n$个结点的有根树$T$.结点编号为$1…n$,其中根结点为$1$. 树上每条边的长度为$1$.我们用$d(x,y)$表示结点$x,y$在树上的距离,$LC ...
- 【UOJ#33】【UR #2】树上GCD(长链剖分,分块)
[UOJ#33][UR #2]树上GCD(长链剖分,分块) 题面 UOJ 题解 首先不求恰好,改为求\(i\)的倍数的个数,最后容斥一下就可以解决了. 那么我们考虑枚举一个\(LCA\)位置,在其两棵 ...
- 【codeforces 798C】Mike and gcd problem
[题目链接]:http://codeforces.com/contest/798/problem/C [题意] 给你n个数字; 要求你进行若干次操作; 每次操作对第i和第i+1个位置的数字进行; 将 ...
- 【Codeforces 582A】 GCD Table
[题目链接] 点击打开链接 [算法] G中最大的数一定也是a中最大的数. G中次大的数一定也是a中次大的数. 第三.第四可能是由最大和次大的gcd产生的 那么就不难想到下面的算法: ...
随机推荐
- 《C++ Primer Plus》学习笔记2
<C++ Primer Plus>学习笔记2 第五章 循环和关系表达式 ========================================================== ...
- 一见钟情Sublime
打开 preferences -> Setting-User,加入下面代码 { "font_size": 14, "ignored_packages": ...
- Linux开发环境搭建与使用——Linux必备软件之Samba
假如我们是在ubuntu环境上做对应的开发.有的时候,我们须要把我们写的程序共享给别人,或者,自己拷贝出来备份一份.我们习惯用U盘拷贝,假设须要频繁拷贝的话,这样会不太方便.这里给大家介绍一种更好的方 ...
- 【HDU 1847】 Good Luck in CET-4 Everybody!
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=1847 [算法] 我们知道,每一种状态,要么必胜,要么必败 记忆化搜索即可 [代码] #includ ...
- JavaScript:目录
ylbtech-JavaScript:目录 1. https://www.javascript.com/ 2. 1.返回顶部 1. http://www.runoob.com/js/js-functi ...
- [PHP] Ecstore 开发学习资源
一.ECOS框架图 二.学习资源链接 PHP之窗 http://www.phpwindow.com/ ECOS百科大全 http://www.ec-os.net/doc.html
- Visual Studio写Cuda代码
1. 正常新建一个项目 2. 在项目中右键, build 选项中选择 CUDA 编译器 3. 项目属性中设置 CUDA 链接库 和 头文件 编译参数等 4. 完成 cu cuh 文 ...
- 前端(小程序)项目Aes.js/Md5.js加密的处理方法
做项目中需要对前端数据加密传输这个时候需要用到前端加密的算法主要是:Aes.js,Md5.js 一.Vue项目用到的aes.js加密. 1.直接在index.html引入aes.js或者在npm in ...
- 数组和String调用方法时,值是否改变(包含可变参数)
package com.wh.encapsulation; import java.util.Arrays; /** * @author 王恒 * @datetime 2017年4月5日 上午9:33 ...
- Three学习之曲线
曲线 属性 1. .arcLengthDivisions 当通过.getLengths计算曲线的累积段长度时,此值决定了分割的数量.为了确保在使用.getSpacedPoint等方法时的精度,如果曲线 ...