CF1909B Make Almost Equal With Mod 题解
解题思路
一个很显然的结论:
- 对于所有的
,一定存在一个数 ,使得 有且仅有两个不同的值。
证明如下:
- 考虑将每个
转化为二进制值,那么对于 取模相当于保留后 位; - 设第
个数第一次出现 的位置在 ,那么对于这个数, 位均为 ; - 设
,那么有当 时,若干个数取模后为 ,剩余的数为 。
观察
AC 代码
#include<math.h>
#include<time.h>
#include<stdio.h>
#include<algorithm>
#define ll long long
#define N 105
#include<set>
int n,m;ll a[N],b[N],delta[N];
std::set<ll> s;
inline void work(){
scanf("%d",&n);
for(register int i=1;i<=n;++i)
scanf("%lld",&a[i]);
ll Mode=2;
while(true){s.clear();
for(register int i=1;i<=n;++i){
s.insert(a[i]%Mode);
}if(s.size()==2){
printf("%lld\n",Mode);
return;
}Mode=Mode*2;
}
}signed main(){
int T;scanf("%d",&T);
while(T--) work();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下