http://codeforces.com/contest/803/problem/C

【题意】

给定两个数n,k(1 ≤ n, k ≤ 10^10)

要你输出k个数,满足以下条件:

①这k个数之和等于n

②严格递增

②输出的这k个数的最大公约数q尽可能大。

【思路】

因为是严格递增,所以sum[k]>=k(k+1)/2,而n<=1e10,所以k应该在1e5多一点。

可以找出最大的满足n<=1e10的k,给定的k超出这个直接输出-1.

然后接下来考虑怎么使最大公约数最大:

因为q肯定也是n的约数,所以可以先把n的公约数都找出来,时间复杂度是O(sqrt(n)),从大到小排序后一次判断能不能满足q*(1+2+···+k)<=n就可以了。

【注意】

1. 判断q*(1+2+···+k)<=n不能写if(q*sum[k]<=n)

会爆的,最大的q就是n本身,当n=1e10,k=1e5的时候,q*sum[k]就爆long long了,所以要写成

 if(sum[m]<=n/d[i])
{
return true;
}
return false;

2. 对于i*i==n的要特别判断

3. 要特别考虑1 1的corner case.

【Accepted】

 #include <iostream>
#include <stdio.h>
#include <cmath>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <deque>
#include <stack>
#include <string>
#include <bitset>
#include <ctime>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
ll n,m;
const int maxn=1e6+;
ll sum[maxn];
int cou;
void Init()
{
memset(sum,,sizeof(sum));
for(int i=;i<maxn;i++)
{
sum[i]=sum[i-]+(ll)i;
if(sum[i]>=)
{
cou=i;
break;
}
}
}
ll d[];
bool cmp(ll a,ll b)
{
return a>b;
} bool judge(int i)
{
if(sum[m]<=n/d[i])
{
return true;
}
return false;
}
void Print(int i)
{
for(int k=;k<=m-;k++)
{
cout<<d[i]*(ll)k<<" ";
}
cout<<n-d[i]*sum[m-]<<endl;
}
int main()
{
Init();
cin>>n>>m;
if(m>=cou)
{
printf("-1\n");
return ;
}
if(sum[m]>n)
{
printf("-1\n");
return ;
}
int cnt=;
ll index=;
for(int i=;(ll)i*(ll)i<n;i++)
{
if(n%(ll)i==)
{
d[cnt++]=(ll)i;
d[cnt++]=n/(ll)i;
}
index=(ll)i;
}
index++;
if(index*index==n)
{
d[cnt++]=index;
}
sort(d,d+cnt,cmp);
int flag=;
for(int i=;i<cnt;i++)
{
if(judge(i))
{
flag=;
Print(i);
break;
}
}
if(flag==)
{
printf("-1\n");
}
return ;
}

注意爆ll,注意corner case

最新文章

  1. canvas流星月亮星星银河
  2. VIM配置
  3. 基于android平台的出题软件---- 每日30题
  4. git 使用入门
  5. java 访问sql server数据库
  6. wireshark过滤语法总结-重点偏移过滤
  7. jquery中对动态生成的标签响应click事件(二)…与ajax交互使用
  8. linux动态库编译和使用详细剖析
  9. HDU 5568 sequence2 区间dp+大数
  10. LeetCode题解——Unique Path(DP与优化)
  11. 转载JQuery 获取设置值,添加元素详解
  12. 汇编语言-[BX]和loop指令
  13. winform 读取保存配置文件
  14. Flex中怎么给表格中的滚动栏定位
  15. CentOS 6.9安装Python2.7.13
  16. 不用安装Oracle客户端
  17. gdb调试的layout使用
  18. MongoDB复合索引详解
  19. CSS设置DIV边框为圆角,添加背景色溢出的问题
  20. POJ 1182 食物链(并查集+偏移向量)题解

热门文章

  1. BigDecimal取余运算
  2. Android学习笔记--Intent
  3. ASP.NET Core 企业级开发架构简介及框架汇总 (转载)
  4. Codeforces GYM 100741A . Queries
  5. core下的routelink
  6. linux部署全流程(未完)
  7. CWnd::Updata的作用
  8. Shell转大写为小写
  9. 条款34:区分接口继承和实现继承(Different between inheritance of interface and inheritance of implemenation)
  10. LeetCode(18)4Sum