专栏文章

题解 CF2164B Even Modulo Pair

CF2164B题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@min13gvf
此快照首次捕获于
2025/12/01 18:50
3 个月前
此快照最后确认于
2025/12/01 18:50
3 个月前
查看原文

题解 CF2164B Even Modulo Pair

给定长度为 nn 的严格单调递增序列 aa,求是否存在一对 (x,y)(x,y),使得:
  • x<yx<y
  • x,yax,y\in a
  • ymodx0(mod2)y\bmod x\equiv 0\pmod 2
如果存在,给出任意一对。
数据范围:多测,n105\sum n\le 10^5ai109a_i\le 10^9

做法

需要注意力。真注意不到。
若无解,
  • 首先最多只能有一个偶数,因为偶数模偶数显然一定为偶数。
  • 对于奇数,设数列里有一奇数 aia_i,则若要另外的奇数 aja_jaia_i 不为偶数,则其必然要在 [2kai,2(k+1)ai](kZ)[2ka_i,2(k+1)a_i](k\in \mathbb{Z}) 中。所以最多只能构造出 logV\log V 个两两之间不符合要求的奇数。
发现 VV 只有 10910^9,去重后取前 4040 个(若不足则取全部)暴力枚举即可。
代码CPP
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<fstream>
#include<algorithm>
#include<map>
#include<unordered_map>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#define ll long long
#define lf double
#define ld long double
using namespace std;
ll T,n,a[200010];
int main(){
	ios::sync_with_stdio(0);
	cin>>T;
	while(T--){
		cin>>n;
		for(int i=0;i<n;i++){
			cin>>a[i];
		}
		n=min(n,40ll);
		bool flg=0;
		for(int i=0;i<n;i++){
			for(int j=i+1;j<n;j++){
				if(a[j]%a[i]%2==0){
					cout<<a[i]<<' '<<a[j]<<endl;
					flg=1;
					break;
				}
			}
			if(flg){
				break;
			}
		}
		if(!flg){
			cout<<-1<<endl;
		}
	}
	return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...