列表

详情


NC229811. Bitwise Or vs LCM

描述

给你一个长度为 n 的序列 a (),你需要找到一个二元组 (i, j) (),满足 。其中 代表按位或, 代表最小公倍数。如果无解,输出 -1

输入描述

第一行包含一个整数 n (),代表序列的长度。

第二行包含 n 个整数 () 。

输出描述

输出两个整数 i, j () 满足  。如果有多组解,你可以输出任意一组;如果无解,输出 -1

示例1

输入:

2
1 1

输出:

1 2

示例2

输入:

2
3 4

输出:

-1

说明:

在样例 2 中,3 \, | \, 4 = 7 < \text{lcm}(3, 4) = 12,因此无解。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 96ms, 内存消耗: 5080K, 提交时间: 2022-02-17 14:14:14

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+7;
int vis[maxn];
int p[maxn];
int n,ma;
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>p[i];
		vis[p[i]]=i;
		ma=max(ma,p[i]);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=p[i];j<=1e6;j+=p[i])
		{
			if(vis[j]&&vis[j]!=i)
			{
				cout<<min(vis[j],i)<<" "<<max(vis[j],i)<<endl;
				return 0;
			}
		}
	}
	cout<<-1<<endl;
}

上一题