Description
输入
a1,a2,a3,...,an
,找出值
x
,使
Solution
反向考虑使缩减的字符数最多,那么对于长度为
x
的tab,缩减的字符数为
对于每个长度
#include <cstdio>
#include <cstdlib>
using namespace std;
typedef long long ll;
const int maxn = 1000005;
int n, a[maxn], s[maxn];
inline int gi()
{
char c = getchar();
while(c < '0' || c > '9') c = getchar();
int sum = 0;
while('0' <= c && c <= '9') sum = sum * 10 + c - 48, c = getchar();
return sum;
}
int main()
{
freopen("tab.in", "r", stdin);
freopen("tab.out", "w", stdout);
ll sum = 0, res, ans = 0;
int Maxa = 0, i, a, j;
n = gi();
for(i = 1; i <= n; ++i) {
a = gi(); sum += a; ++s[a];
if(Maxa < a) Maxa = a;
}
for(int i = Maxa - 1; i >= 1; --i) s[i] += s[i + 1];
for(i = 1; i <= Maxa; ++i) {
res = 0;
for(j = i; j <= Maxa; j += i) res += s[j];
res *= (i - 1);
if(res > ans) ans = res;
}
printf("%lld\n", sum - ans);
return 0;
}