CF #552(div3)G 最小lcm
题目链接:http://codeforces.com/contest/1154/problem/G
题意:lcm是最小公倍数,本题就是给你一个数组(可能会重复),要求你判断出那两个数的最小公倍数最小,并输出这两个数的下标
分析:首先想重复,因为重复的话非常好整,最小公倍数就是它自己,所以我们可以先处理一遍,把出现过的重复的数最小的先设为答案(ans)。
另外,记得初始化ans,这里有个坑,记得不要初始化为inf,因为最小公倍数是会爆int的,这点要注意。
然后再开始从1-ans遍历,对于每个数,都不断加倍,来寻找答案,遍历完后输出答案。
注意输出是下标。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;//这个数是1e9数量级的,且可以用memset函数
const int maxn=1e7+;
const double pi=acos(-);
const int mod=1e9+;
int idx[maxn];//idx[x]存的是数值x的下标
int main(){
int n;scanf("%d",&n);
int t1=,t2=,x;ll ans=1e14;
for(int i=;i<=n;i++){
scanf("%d",&x);
if(idx[x]){
if(ans>x)
t1=idx[x],t2=i,ans=x;
}
else idx[x]=i;
}
for(int i=;i<=maxn;i++){//因为ans是一直在动态变化的,所以这里终止条件我们设为maxn
if(i>=ans) break;
int s1=,s2=;//s1,s2分别记录接下来循环存在的第一个数的值和下标
for(int j=i;j<=maxn;j+=i){
if(!idx[j]) continue;
if(!s1) s1=j,s2=idx[j];
else{
if(ans>1ll*j*s1/i){//最小公倍数=两数乘积/最大公因数 这里可能会溢出,记得转化
ans=1ll*j*s1/i;
t1=s2,t2=idx[j];
break;
}
}
}
}
if(t1>t2) swap(t1,t2);
cout<<t1<<" "<<t2<<endl;
return ;
}
CF #552(div3)G 最小lcm的更多相关文章
- CF #552 div3
A - Restoring Three Numbers CodeForces - 1154A Polycarp has guessed three positive integers aa, bb a ...
- Codeforces #550 (Div3) - G.Two Merged Sequences(dp / 贪心)
Problem Codeforces #550 (Div3) - G.Two Merged Sequences Time Limit: 2000 mSec Problem Description T ...
- CF #552(div3)F 背包问题
题目链接:http://codeforces.com/contest/1154/problem/F 题意:一个商店有n个物品,每个物品只能买一次,同时有m种优惠,即一次买够x件后,这x件中最便宜的k件 ...
- Codeforces Round #552:G. Minimum Possible LCM
官方题解是时间复杂度为O(nd)的.这里给出一个简单实现但是时间复杂度为O(NlogN) (N=1e7) 因为 a*b/gcd(a,b)=lcm(a,b) 所以我们可以枚举每一个因子,然后找到存在这个 ...
- CF 552 Neko does Maths
给出两个数a,b 求k 使得 a+k b+k有最小公倍数 a,b同时加上一个非负整数k,使得,a+k,b+k的最小公倍数最小 因为最小公公倍数=x*y / gcd(x,y),所以肯定离不开最大 ...
- 【cf contest 1119 G】Get Ready for the Battle
题目 你有\(n\)个士兵,需要将他们分成\(m\)组,每组可以为0: 现在这些士兵要去攻打\(m\)个敌人,每个敌人的生命值为\(hp_i\) : 一轮游戏中一组士兵选定一个攻打的敌人,敌人生命值- ...
- CF #575 Div3
// 比赛链接:https://codeforces.com/contest/1196 // CF 2019.7.24 // 本想Div3手速场上分,结果卡在C题,掉了不少分. // 自闭了这么久,今 ...
- CF 552(div 3) E Two Teams 线段树,模拟链表
题目链接:http://codeforces.com/contest/1154/problem/E 题意:两个人轮流取最大值与旁边k个数,问最后这所有的数分别被谁给取走了 分析:看这道题一点思路都没有 ...
- 【Cf Edu #47 G】Allowed Letters
这个题大概就是每一个位置都有一个能填字符的限制(一个点集),给出已有的$n$个字符,问能填出的最小字典序的字符串. 总体思路是贪心,每一位尽量选最小的字符. 关键在于判断在某位选了一个字符后,接下来的 ...
随机推荐
- Git 撤销到某个版本的代码
Git checkout 版本号 文件名带路径的
- nodejs:导出Excel和解析导入的Excel
用的是koa2框架,但好好处理一下,用express框架也是可以的.导出的Excel是xlsx的格式,解析导入Excel的有xlsx和csv格式.通常导入Excel是要上传的,然后获取文件的路径,这里 ...
- html5 旋转导航练习
ul{ list-style: none; font-size: 24px; font-weight: bold; }a{ text-decoration: none;}li{ ...
- insert into TABLE by SELECT ...
insert into isp_rmi3 ( select r.id, r.blue_id, r.sell_channel,NULL, r.interface_id, NULL, NULL, r.ur ...
- Jmeter二次开发
Jmater函数扩展的步骤1. 导入Jmeter源码,或使用maven项目,引入依赖的jar包 2. 继承AbstractFunction,实现自定义Function 3. 继承JMeterTestC ...
- python各种转义字符
- 文件下载的ie11兼容性优化
在 http://www.cnblogs.com/sunshine6/p/8296945.html 中有说关于前后端分离时如何实现文件下载的功能,但是过完年回来,同事告诉我这个方式在ie11上存在不兼 ...
- 创建我的vue项目
vue-cli 全局安装 1.命令行执行:npm install --global vue-cli: ------也可以用这个命令下载新版本 2.安装完成以后 可以输入命令 :vue 回车,可以看到针 ...
- VUE引入字体图标库
1. 下载阿里图标 2. 解压文件,并复制文件到VUE项目内 3. 找到添加的字体图标的.css文件,将.iconfont改成[class^="iconfont"], [class ...
- PHP选择排序
选择排序,非常的直观,也相对简单. 思路如下: 假设,从小到大排序. 首先,第一轮循环,从所有数组中,找出最小的元素,然后将其下标记录下来. 然后,确定不是第一个元素,则和第一个元素进行交换. 接下来 ...