题解
http://vfleaking.blog.uoj.ac/blog/33
选择tab宽度为
i
,能减少的代码量是
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x = 0, f = 1; char c = getchar();
while(!isdigit(c)) { if(c == '-') f = -1; c = getchar(); }
while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); }
return x * f;
}
const int N = 1000000 + 10;
typedef long long ll;
int n, a[N], s[N], mx;
ll sum, ans;
void init(){
n = read();
for(int i = 1; i <= n; i++){
a[i] = read();
s[a[i]]++;
sum += a[i];
mx = max(mx, a[i]);
}
for(int i = 1; i <= mx; i++) s[i] += s[i-1];
}
void work(){
ll tmp;
for(int i = 2; i <= mx; i++){
tmp = 0;
for(int j = i; j <= mx; j += i){
if(j + i - 1 <= mx) tmp += (s[j+i-1] - s[j-1]) * (j / i);
else tmp += (s[mx] - s[j-1]) * (j / i);
}
ans = max(ans, tmp * (i - 1));
}
printf("%lld\n", sum - ans);
}
int main(){
init();
work();
return 0;
}