Video Cards
题目大意:
在n个数中挑出一个数A使所以的数都整除A再乘上A;问选一个A使最终的sum最大并打出它。
input
4
3 2 15 94
8 2 2 7
output
27
18
不难发现对于A
凡是[A,2*A-1]其贡献都为A;
同理对于[A*k,A * k+A-1]贡献都为 A * k;
//处理出所以的sum[l,r]即大小在l,r间的数的个数
for(int i=1;i<=mx;i++)sum[i]=sum[i-1]+cnt[i];
sort(A+1,A+n+1);
for(int i=1;i<=n;i++)
if(!mark[A[i]]){
k=A[i];res=0;
for(int j=k;j<=mx;j+=k){
mark[j]=1;
int r=j+k-1;
if(r>mx)r=mx;
res+=1ll*j*max(0,(sum[r]-sum[j-1]));
}