提交时间:2024-10-24 13:32:47

运行 ID: 33846

#include <bits/stdc++.h> #define int long long using namespace std; int n,b,x,c[100005]; int mx = -1,sum; inline int sl (int a) { return a * (a - 1) / 2; } int chk (int k) { int s = sum; for (int i = 1;i <= n;i++) { int a = c[i] % k,b = k - a; s -= a * sl(c[i] / k + 1); s -= b * sl(c[i] / k); } s *= b; s -= (k - 1) * x; return s; } signed main () { freopen("army.in","r",stdin); freopen("army.out","w",stdout); cin >> n >> b >> x; for (int i = 1;i <= n;i++) { cin >> c[i]; mx = max(mx,c[i]); sum += sl(c[i]); } int l = 1,r = mx,ans = 0; while (l < r) { if (l - r < 10) { for (int i = l;i <= r;i++) { ans = max(ans,chk(i)); } break; } int x = (r - l) / 3; int m1 = l + x,m2 = m1 + x; int md = (m1 + m2) >> 1; int c = chk(md),c1 = chk(m1),c2 = chk(m2); if (c >= c1 && c >= c2) { l = m1 + 1,r = m2; } else if (c1 < c2) { l = m2 + 1; } else { r = m1; } } ans = max(ans,chk(l)); cout << ans << endl; return 0; }