H-Hash Function
原题链接:https://ac.nowcoder.com/acm/contest/11166/H
题目大意
给定一个大小为
n
(
1
≤
n
≤
5
⋅
1
0
5
)
n(1≤n≤5·10^5)
n(1≤n≤5⋅105)的集合
S
=
{
a
0
,
a
1
,
a
2
,
⋅
⋅
⋅
,
a
n
−
1
}
S=\{a_0,a_1,a_2,···,a_{n-1}\}
S={a0,a1,a2,⋅⋅⋅,an−1}.
求最小的正整数seed,使得对于任意
i
(
0
≤
i
<
n
)
i(0≤i<n)
i(0≤i<n),
a
i
m
o
d
s
e
e
d
a_i\bmod seed
aimodseed的结果各不相同。
解题思路
在比赛进行时的数据下不要问我怎么过加强数据,问我也不会,可以用此思路过。
很容易发现seed只能在
n
n
n~
m
a
x
(
a
0
,
a
1
,
a
2
,
⋅
⋅
⋅
,
a
n
−
1
)
+
1
max(a_0,a_1,a_2,···,a_{n-1})+1
max(a0,a1,a2,⋅⋅⋅,an−1)+1之间,之后就是暴力枚举的过程了。想拿满分者,莫看我这骗分代码,看dalao的去。
代码实现
#include<bits/stdc++.h>
using namespace std;
int n,a[1000001],b[1000001];
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i],b[a[i]]=1;
sort(a+1,a+n+1);
for(int i=n;i<=a[n]+1;i++)
{
int t=0;
for(int j=n;a[j]>=i;j--){
if(b[a[j]%i]==1)
{
t=1;
break;
}
}
if(t==0)
{
cout<<i;
return 0;
}
}
}
总结
本题解仅仅为了练手,千万不要按此思路做此题!!!