rt,求出前3大值,加上一点判断,就A了:
#include<bits/stdc++.h>
using namespace std;
int a[200010],n,mx1,mx2,mx3;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
if(a[i]>mx1) mx1=a[i];
}
for(int i=1;i<=n;i++){
if(a[i]>mx2&&a[i]<mx1) mx2=a[i];
}
for(int i=1;i<=n;i++){
if(a[i]>mx3&&a[i]<mx2) mx3=a[i];
}
if(mx3==0) cout<<min(mx1%mx2,mx2%mx1);
else if(mx2==0) cout<<-1;
else cout<<max(mx3,mx1%mx2);
return 0;
}