Codeforces 1154G 枚举
2024-10-21 09:11:39
题意:给你一堆数,问其中lcm最小的一对数是什么?
思路:因为lcm(a, b) = a * b / gcd(a, b), 所以我们可以考虑暴力枚举gcd, 然后只找最小的a和b,去更新答案即可。
数据范围1e7? 不慌,bitset搞一下, 1e7log(1e7)可以500ms过。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000010;
bitset<maxn * 10> v, v1;
int a[maxn];
vector<int> ans;
long long res = 1e18;
int main() {
int n, res1, res2, pos1 = -1, pos2 = -1, mx = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
mx = max(mx, a[i]);
if(v[a[i]] == 1) v1[a[i]] = 1;
v[a[i]] = 1;
}
for (int i = 1; i <= mx; i++) {
ans.clear();
for (int j = i; j <= mx; j += i) {
if(v[j]) {
ans.push_back(j);
if(v1[j]) ans.push_back(j);
if(ans.size() >= 2) break;
}
}
if(ans.size() < 2) continue;
if(res > (long long)ans[0] * ans[1] / i) {
res = (long long)ans[0] * ans[1] / i;
res1 = ans[0], res2 = ans[1];
}
}
int flag = 0;
for (int i = 1; i <= n; i++) {
if(pos1 == -1 && res1 == a[i]) {
pos1 = i;
flag |= 1;
continue;
}
if(pos2 == -1 && res2 == a[i]) {
pos2 = i;
flag |= 2;
}
if(flag == 3) break;
}
if(pos1 > pos2) swap(pos1, pos2);
printf("%d %d\n", pos1, pos2);
}
最新文章
- JAVA简单工厂模式(从现实生活角度理解代码原理)
- [No00003A]操作系统Operating Systems 内核级线程Kernel Threads内核级线程实现Create KernelThreads
- Ubuntu 汉化及kate汉化和使用自带终端的解决方式
- Python配合BeautifulSoup读取网络图片并保存在本地
- Cloudera Hadoop什么是CDH及CDH版本介绍
- 【转】解决svn Authorization failed错误
- oracle10g库连接报错
- 20141017--类型String类
- 单例模式(Singleton)的6种实现
- openstack 在线repo
- C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)
- 在RichTextBox控件中插入图片
- (转)iOS7界面设计规范(13) - UI基础 - 与iOS的系统整合
- Android使用HttpClient向服务器传输文件
- ES6 - 变量的解构赋值学习笔记
- Python学习二:词典基础详解
- Writing a Simple Publisher and Subscriber
- MySQL_关于索引空间的的一些记录
- web api 安全
- JAVA多线程之线程间的通信方式
热门文章
- 连电子硬件行业都在开始使用 Git 了你还在等什么?
- FC Switch sfpshow
- snmp 介绍和Ubuntu安装使用
- MySQL Join算法与调优白皮书(二)
- 汇编_指令_LEA和MOV的区别
- 慢日志之二:ERROR 1146 (42S02): Table &#39;mysql.slow_log&#39; doesn&#39;t exist,分析诊断工具之四
- [转]java中byte转换int时为何与0xff进行与运算
- offset()和position()
- 杂项: Redis
- ESXI5-WIN2008R2安装域控以及额外域笔记