题解:AT_abc432_c [ABC432C] Candy Tribulation
来补一篇题解。
赛时仅过 AB,是不是没救了。
首先,考虑全部分配小糖果,即第
然后,考虑将所有小孩的糖果重量同步为目前所有小孩中糖果重量的最大值。如全部替换仍旧达不到,那么无解。然后,找到所有小孩中小糖果数量的最小值
#include<bits/stdc++.h>
#define ll long long
#define ull unsgined ll
#define pii pair<int,int>
#define pli pair<ll,int>
#define pil pair<int,ll>
#define fi first
#define se second
#define gtc getchar
#define ptc putchar
using namespace std;
const int N=2e5+5;
int n,x,y;
int a[N];
ll b[N];
ll ans;
int minn=1e9;
int main(){
scanf("%d%d%d",&n,&x,&y);
for(int i=1;i<=n;i++){
scanf("%d",a+i);
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
b[i]=1ll*a[i]*x;
}
for(int i=2;i<=n;i++){
if((b[i]-b[i-1])%(y-x)){
puts("-1");
return 0;
}
}
for(int i=1;i<=n;i++){
ll cnt=(b[n]-b[i])/(y-x);
if(cnt>a[i]){
puts("-1");
return 0;
}
ans+=cnt;
a[i]-=cnt;
minn=min(minn,a[i]);
}
ans+=1ll*minn*n;
printf("%lld\n",ans);
return 0;
}
AC 记录。