【数学】codeforces C. Maximal GCD
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
【数学】codeforces C. Maximal GCD的更多相关文章
- codeforces 803C Maximal GCD(GCD数学)
Maximal GCD 题目链接:http://codeforces.com/contest/803/problem/C 题目大意: 给你n,k(1<=n,k<=1e10). 要你输出k个 ...
- Codeforces 803C. Maximal GCD 二分
C. Maximal GCD time limit per test: 1 second memory limit per test: 256 megabytes input: standard in ...
- Codeforces H. Maximal GCD(贪心)
题目描述: H. Maximal GCD time limit per test 1 second memory limit per test 256 megabytes input standard ...
- CodeForces - 803C Maximal GCD 【构造】
You are given positive integer number n. You should create such strictly increasing sequence of k po ...
- Codeforces 803C. Maximal GCD
题目链接:http://codeforces.com/contest/803/problem/C 中了若干trick之后才过... k个数的严格递增序列最小权值和就是${n*(n+1)/2}$,枚举这 ...
- CodeForce-803C Maximal GCD(贪心数学)
Maximal GCD CodeForces - 803C 现在给定一个正整数 n.你需要找到 k 个严格递增的正整数 a1, a2, ..., ak,满足他们的和等于 n 并且他们的最大公因数尽量大 ...
- Maximal GCD CodeForces - 803C (数论+思维优化)
C. Maximal GCD time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- AC日记——Maximal GCD codeforces 803c
803C - Maximal GCD 思路: 最大的公约数是n的因数: 然后看范围k<=10^10; 单是答案都会超时: 但是,仔细读题会发现,n必须不小于k*(k+1)/2: 所以,当k不小于 ...
- Educational Codeforces Round 20 C. Maximal GCD
C. Maximal GCD time limit per test 1 second memory limit per test 256 megabytes input standard input ...
随机推荐
- Linux下用matplotlib画决策树
1.trees = {'no surfacing': { 0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}} 2.从我的文件trees.txt里读的决策树, ...
- ABP教程(四)- 开始一个简单的任务管理系统 - 实现UI端的增删改查
接上一篇:ABP教程(三)- 开始一个简单的任务管理系统 – 后端编码 1.实现UI端的增删改查 1.1添加增删改查代码 打开SimpleTaskSystem.sln解决方案,添加一个“包含视图的MV ...
- AJPFX关于Class类和Class类实例
Java程序中的各个Java类属于同一类事物,描述这类事物的Java类就是Class类.对比提问:众多的人用一个什么类表示?众多的Java类用一个什么类表示?人 PersonJava类 Cla ...
- 在自己的工程中使用ijkplayer的功能
最近在做一个软解视频叠加硬解视频的方案,网上看了很多教程,始终不得要领.虽然ijkplayer提供了ijkplayer-example这个示例工程,但对于初入安卓的人来说,要将ijkplayer整合到 ...
- Oracle体系结构总览
第一篇 Oracle架构总览 先让我们来看一张图 这张就是Oracle 9i的架构全图.看上去,很繁杂.是的,是这样的.现在让我们来梳理一下: 一.数据库.表空间.数据文件 1.数据库 数据库是数 ...
- 浏览器报错问题解决:Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight respons
FAQ: Failed to load http://www.erpshop.com/index.php: Request header field Content-Type is not allow ...
- Mac上安装Homebrew和wget
实际上是使用Homebrew来安装wget 安装Homebrew Homebrew一般称为brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常 ...
- life of a NPTL pthread
这是2013年写的一篇旧文,放在gegahost.net上面 http://raison.gegahost.net/?p=91 March 7, 2013 life of a NPTL pthread ...
- qt sql多重条件查询简便方法
转载请注明出处:http://www.cnblogs.com/dachen408/p/7457312.html 程序设计过程中,经常要涉及到查询,并且有很多条件,且条件可为空,如果逐个判断,会有很多情 ...
- COGS 1406. 邻居年龄排序[Age Sort,UVa 11462](水题日常)
★ 输入文件:AgeSort.in 输出文件:AgeSort.out 简单对比时间限制:1 s 内存限制:2 MB [题目描述] Mr.Zero(CH)喜闻乐见地得到了一台内存大大增强 ...