#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL maxn=4110;
LL a[maxn];
struct node{
LL v,w;
node (LL uu,LL vv){
v=uu;
w=vv;
}
};
const long long N=810010;
vector<node> G[N];
set<pair<LL,LL> > min_heap;
LL d[N];
int main(){
LL n,m;
cin>>n>>m;
int cnt=n;
LL mini=0x3f3f3f;
for(LL i=1;i<=n;i++){
cin>>a[i];
mini=min(mini,a[i]);
}
for(LL i=1;i<=m;i++){
for(LL j=1;j<=n;j++){
a[++cnt]=a[j]-i;
}
}
const LL mod=mini-m;
for(LL i=0;i<mod;i++){
for(LL j=1;j<=cnt;j++){
LL x=a[j];
LL y=(i+a[j])%mod;
G[i].push_back(node(y,x));
}
}
if(mini<=1) {
cout<<"-1";
return 0;
}
LL gd=a[1];
for(int i=2;i<=cnt;i++){
gd=__gcd(gd,a[i]);
}
if(gd!=1){
cout<<"-1";
return 0;
}
memset(d,0x7f,sizeof(d));
d[0]=0;
min_heap.insert(make_pair(0,0));
while(min_heap.size()){
long long mind=min_heap.begin() ->first;
long long v=min_heap.begin() ->second;
min_heap.erase(min_heap.begin());
for(long long i=0;i<G[v].size();i++){
if(d[G[v][i].v]>d[v]+G[v][i].w) {
min_heap.erase(make_pair(d[G[v][i].v],G[v][i].v));
d[G[v][i].v]=d[v]+G[v][i].w;
min_heap.insert(make_pair(d[G[v][i].v],G[v][i].v));
}
}
}
LL ans=0;
for(LL i=0;i<mod;i++) ans=max(ans,d[i]);
cout<<ans-mod;
return 0;
}
出现了奇怪的RE,P2662 40分求调