提交时间:2024-10-24 13:39:48

运行 ID: 33851

#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define p_b push_back using namespace std; typedef long long ll; const int maxn=3e5+10; inline ll read(){ ll x=0;short t=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; }int n,x,b,a[maxn],mp[maxn]; ll f(int x,int y){ if(x<=y)return x*1ll*(x-1)/2; int d=x/y,c1=x%y; if(!c1)return y*1ll*(y-1)/2*1ll*d*1ll*d; int c2=y-x%y;swap(c1,c2); ll res=c1*1ll*(c1-1)/2*1ll*d*1ll*d; res+=c2*1ll*(c2-1)/2*1ll*(d+1)*1ll*(d+1); res+=c1*1ll*c2*1ll*d*1ll*(d+1); return res; } void slv(){ n=read(),b=read(),x=read(); int mx=0; up(i,1,n)a[i]=read(),mx=max(mx,a[i]); up(i,1,n)mp[a[i]]++; vector<int>v; up(i,1,mx)if(mp[i])v.p_b(i); ll res=0; up(i,1,mx){ ll s=0; for(int x:v)s+=f(x,i)*mp[x]; s=s*b-(i-1)*1ll*x; res=max(res,s); }printf("%lld\n",res); }int main(){ //freopen("army.in","r",stdin); //freopen("army.out","w",stdout); slv(); return 0; }