CF #552(div3)G 最小lcm】的更多相关文章

题目链接:http://codeforces.com/contest/1154/problem/G 题意:lcm是最小公倍数,本题就是给你一个数组(可能会重复),要求你判断出那两个数的最小公倍数最小,并输出这两个数的下标 分析:首先想重复,因为重复的话非常好整,最小公倍数就是它自己,所以我们可以先处理一遍,把出现过的重复的数最小的先设为答案(ans). 另外,记得初始化ans,这里有个坑,记得不要初始化为inf,因为最小公倍数是会爆int的,这点要注意. 然后再开始从1-ans遍历,对于每个数,…
A - Restoring Three Numbers CodeForces - 1154A Polycarp has guessed three positive integers aa, bb and cc. He keeps these numbers in secret, but he writes down four numbers on a board in arbitrary order — their pairwise sums (three numbers) and sum o…
Problem  Codeforces #550 (Div3) - G.Two Merged Sequences Time Limit: 2000 mSec Problem Description Two integer sequences existed initially, one of them was strictly increasing, and another one — strictly decreasing. Strictly increasing sequence is a…
题目链接:http://codeforces.com/contest/1154/problem/F 题意:一个商店有n个物品,每个物品只能买一次,同时有m种优惠,即一次买够x件后,这x件中最便宜的k件将免费 一个要买k个物品,求最小花费. 分析:如果没有优惠的话,就是一种很普通的背包问题,其状态转移方程就为f[i]=min(f[j],f[j]+剩下的i-j件物品的价格) 加上优惠券后只需要多一个g[x]数组来存储最佳优惠价格就好,具体请看代码 #include<bits/stdc++.h> u…
官方题解是时间复杂度为O(nd)的.这里给出一个简单实现但是时间复杂度为O(NlogN) (N=1e7) 因为 a*b/gcd(a,b)=lcm(a,b) 所以我们可以枚举每一个因子,然后找到存在这个因子的 最小的两个数(只要最小的两个即可,因为后面较大数的数的lcm肯定会比较小的两个数的lcm大). 在这些答案中取最小的即可. 代码实现也十分简洁: #include<bits/stdc++.h> using namespace std; typedef long long LL; ; int…
给出两个数a,b 求k     使得 a+k b+k有最小公倍数 a,b同时加上一个非负整数k,使得,a+k,b+k的最小公倍数最小 因为最小公公倍数=x*y / gcd(x,y),所以肯定离不开最大公约数了: 首先有个结论 gcd(x,y)=gcd(x,y-x) (y>x) 令c=gcd(x,y),那么x%c=0,y%c=0,(y-x)%c=0,所以gcd(x,y)=gcd(x,y-x) 因为题目中d=x-y的值不会变,所以我们就可以通过枚举d的因子,来凑a+k (d的因子也是(a+k)的因子…
题目 你有\(n\)个士兵,需要将他们分成\(m\)组,每组可以为0: 现在这些士兵要去攻打\(m\)个敌人,每个敌人的生命值为\(hp_i\) : 一轮游戏中一组士兵选定一个攻打的敌人,敌人生命值-=这组的人数: 胜利的判定是所有敌人的生命值为非正的: 输出胜利的最小轮数,可以达到最小轮数的分配方式,并输出每轮的策略: \(1 \le m \le n \le 10^6 \ , \ 1 \le \sum hp_i \le 10^6\) ; 题解 答案的下界是\(\lceil \frac{\sum…
// 比赛链接:https://codeforces.com/contest/1196 // CF 2019.7.24 // 本想Div3手速场上分,结果卡在C题,掉了不少分. // 自闭了这么久,今天补题,吸取教训. A - Three Piles of Candies 题意: 比赛时候看了半天也没看明白,真是sb了. Alice与Bob要把三堆糖果尽可能地平分,两人轮流拿,最后一个拿的要保证两人一样多.否则的话如果最后谁多了就要扔掉,直到两人拿的糖果数量相等. 给定三堆糖果初始数量,求他们能…
题目链接:http://codeforces.com/contest/1154/problem/E 题意:两个人轮流取最大值与旁边k个数,问最后这所有的数分别被谁给取走了 分析:看这道题一点思路都没有,想不到模拟链表也该能想到线段树的啊 大部分AC代码是模拟链表的,写起来也更快,但我线段树很不熟,线段树的代码也写一份吧 另外,以后要养成一种习惯,除了主函数定义int main里有int外,其他地方统一用ll了,不要自己给自己挖坑..... 线段树: 意识到是线段树后我建树部分就拿不准怎么做,事实…
这个题大概就是每一个位置都有一个能填字符的限制(一个点集),给出已有的$n$个字符,问能填出的最小字典序的字符串. 总体思路是贪心,每一位尽量选最小的字符. 关键在于判断在某位选了一个字符后,接下来的位置能否满足限制. 考虑怎么判断有解,这里有一种网络流的思路: 有$6$个点,代表了$a - f$$6$个字符,有源点向这些点连边,流量为该字符的个数. 另有$2^{6}$个点,代表了各个点集,这些点向汇点连边,流量为该点集在所有限制中出现的次数. 如果某个点在一个点集中,则由该点向该点集连流量为$…