CF803C Maximal GCD (思维)

??   写在纸上了

 1 #include<bits/stdc++.h>
 2 #define mem(a) memset(a,0,sizeof(a))
 3 #define mem1(a) memset(a,-1,sizeof(a))
 4 #define ll long long
 5 #define mp make_pair
 6 #define inf 0x3f3f3f3f
 7 const int N=1e6+5;
 8 const int M=1e3+10;
 9 const ll lim=1e14+5;
10 using namespace std;
11 int m,f[N];
12 ll n,k,a[N];
13 int main()
14 {
15      cin>>n>>k;
16      if(k>=1e6||(k*(k+1)/2)>n) cout<<-1<<endl;
17      else
18      {
19            ll now=k*(k+1)/2,ans=0; int id=0;
20            for(ll i=1;i*i<=n;i++)
21             if(n%i==0) a[++id]=i;
22
23            for(ll i=1;i<=id;i++)
24            {
25                if(now<=a[i]) {ans=n/a[i];break;}
26                else if(n/a[i]>=now) ans=a[i];
27            }
28            for(ll i=1;i<k;i++)
29             cout<<i*ans<<" ";
30            cout<<ans*(n/ans-(now-k))<<endl;
31
32      }
33      return 0;
34 }

CF 803C

原文地址:https://www.cnblogs.com/XXrll/p/11203413.html

时间: 2024-08-06 22:10:28

CF803C Maximal GCD (思维)的相关文章

Maximal GCD CodeForces - 803C (数论+思维优化)

C. Maximal GCD 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,?...

4.30-5.1cf补题

//yy:拒绝转载!!! 悄悄告诉你,做题累了,去打两把斗地主就能恢复了喔~~~ //yy:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模,就抽空把最近没做的CF题补了点..毕竟明天开始又要继续上好多课呐...Yes, I can!(? •_•)?……(I can Huá shuǐ~~) codeforces 803 A. Maximal Binary Matrix   [简单构造] 题意:n行和n列填充零矩阵. 您要将k个1放在其中,使得得到

codeforces 735D Taxes(数论)

Maximal GCD 题目链接:http://codeforces.com/problemset/problem/735/D --每天在线,欢迎留言谈论. 题目大意: 给你一个n(2≤n≤2e9) 代表一个人的收入. 他需要交税,规则:交税金额为n的最大公约数(本身不算) 他想通过把钱分成几份,然后分别交税,达到交税最少. 知识点: 哥德巴赫猜想:①如果一个数为偶数,那么可以拆成两个质数相加 ②如果一个奇数 (n-2)为质数那么他也可以拆成两个质数相加(2+(n-2)) ③其他的奇数 可以拆成

Educational Codeforces Round 20解(bu)题记录

A. Maximal Binary Matrix 解法:暴力模拟+贪心 #include<bits/stdc++.h> using namespace std; int a[110][110]; int main(){ int n,k,cmp,f=0;scanf("%d%d",&n,&k); if(k>n*n){puts("-1");return 0;}cmp=n; int r=1; while(k>=2*cmp-1){ k-

2019年9月7日(贪心专题考试)

难受,炸\(long~long\),\(QwQ\) \(prob1:Maximal~GCD\) 一句话:注意判炸\(long~long\) 没公约数的情况不用说了,若有设其为\(p\),很明显\(n\)为\(p\)的倍数,此时可以将序列的和化为\(n/p\)个\(p\)的和,又\(n/p\)个最少为\(k*(k+1)>>1\)个,所以就得到了\(n/p\)的下界,则\(p\)的上界为\(\frac{n}{k*(k+1)>>1}\),只需求在该界之下的最大的\(n\)的因数即可求出\

hbx的毒瘤贪心系列题解

毒瘤hbx的贪心专题系列题解 A Maximal gcd 题意:现在给定一个正整数 n.你需要找到 k 个严格递增的正整数a1,?a2,?...,?ak,满足他们的和等于 n 并且他们的最大公因数尽量大.如果不可能请输出 -1.\(1\leq n,k \leq 10^{10}\) 题解:把 n 的所有因子找出来后,求最大因子 x 满足\(x* \frac {k* (k+1)}{2}\leq n\)即可.序列就是\(1* x,2* x,...,(k-1)* x,n-x* \frac{k* (k-1

GCD LCM UVA - 11388 (思维。。水题)

两个数的最小公倍数和最大公约数肯定是倍数关系 然后又让求使得a最小  因为 a = m * gcd 令m = 1 时 a取得最小  即gcd 则b = lcm #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <cmath> #de

!hdu 4091--贪心、枚举--(思维)

题意:有一个容量为n的箱子,有两种珠宝,占的体积和价值分别是s1,v1,s2,v2,求能装下的最大的价值总量. 分析:刚开始以为是背包问题,但其实没那么简单:后来分情况讨论还是不行:后来又暴力枚举,当然是超时了.正确做法是有一部分是用背包的贪心,另一部分用枚举!现在就是看哪一部分用贪心. 看别人的题解是:L = LCM(s1,s2),可是知道大于L的部分就用价值比高的,所以n%L的部分枚举,其余部分贪心,不过这样可能得到的还不是最优解,所以n%L+L的部分枚举,这样就可以了,具体原因我还没想明白

sdut 2847 Monitor (思维题)

题目 题意:给定a, b, x, y;  求使c, d; 使c:d = x :y; 且c<=a, d<=b, 而且c, d尽量大. 先求最小倍数, 再用最小倍数乘 x, y; 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 7 long long gcd(long long a, l