题意:找出ai%aj的值的最大值。
思路:排序后从小往大找,假设处理的是a,那么就找比a*2-1,a*3-1,a*4-1...小的最大值。
AC代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
int num[2000110],maxn=1000000;
int main()
{
int T,t,n,m,i,j,k,ans=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&k);
num[k]=k;
}
for(i=1;i<=maxn*2+1;i++)
if(num[i]!=i)
num[i]=num[i-1];
for(i=2;i<=maxn;i++)
if(num[i]==i)
{
for(j=i*2;j<=maxn*2+1;j+=i)
{
if(num[j-1]>i)
ans=max(ans,num[j-1]%i);
}
}
printf("%d\n",ans);
}