1 条题解
-
0
题意分析
- 问题核心:
- 给定个互不相同的整数,寻找最小的,使得这些整数对取模的结果互不相同。
- 数据范围:
- ,
- 需要高效检查每个候选是否满足条件
解题思路
- 暴力搜索:
- 从开始逐个尝试,直到找到满足条件的
- 对于每个,检查所有是否唯一
- 优化点:
- 当时直接返回
- 最大可能的不超过最大值
实现步骤
- 输入处理:
- 读取所有并存储
- 特殊处理:
- 若,立即输出
- 枚举检查:
- 从开始递增
- 使用哈希表检查模结果是否重复
- 输出结果:
- 找到第一个满足条件的立即输出
代码实现
#include<algorithm> #include<iostream> #include<iomanip> #include<cstring> #include<cstdlib> #include<vector> #include<cstdio> #include<cmath> #include<queue> using namespace std; inline const int Get_Int() { int num=0,bj=1; char x=getchar(); while(x<'0'||x>'9') { if(x=='-')bj=-1; x=getchar(); } while(x>='0'&&x<='9') { num=num*10+x-'0'; x=getchar(); } return num*bj; } int n,m,a[100005],Hash[100005],vst[1000005]; bool Check(int x) { memset(Hash,0,sizeof(Hash)); for(int i=1; i<=m; i++) if(Hash[a[i]%x])return false; else Hash[a[i]%x]=1; return true; } int main() { n=Get_Int(); while(n--) { memset(vst,0,sizeof(vst)); m=Get_Int(); for(int i=1; i<=m; i++)a[i]=Get_Int(); for(int i=1; i<=m; i++) for(int j=1; j<=m; j++) vst[abs(a[i]-a[j])]=1; int i=m-1; while(++i) { if(vst[i])continue; if(Check(i)) { printf("%d\n",i); break; } } } return 0; }
- 问题核心:
- 1
信息
- ID
- 1769
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者