你少判断了一种情况吧,如果a[i]<l时也要算下,最后和超出部分ans2比较,输出较小的。
我看题解里就有。
by jiuguaiwf @ 2017-07-22 16:46:53
```cpp
#include<iostream>
#include<cstdio>
using namespace std;
int a[51];
int l,r,n,i,j,k,sum=0,t=0;
int found(int b[],string str){
int jiduan,p;
if (str=="max")
{
jiduan=-1;
for(k=1;k<=n;k++)
{
if (b[k]>jiduan)
{jiduan=b[k];p=k;}
}
return p;
}
if (str=="min")
{
jiduan=2147483647;
for(k=1;k<=n;k++)
{
if (b[k]<jiduan)
{jiduan=b[k];p=k;}
}
return p;
}
}
int main()
{
int x;
cin>>n;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
cin>>l>>r;
for(i=1;i<=n;i++)
sum+=a[i];
if (l*n>sum || r*n<sum)
{cout<<-1;return 0;}
for(i=1;i<=n;i++)
{
if (a[i]<l)
{
j=l-a[i];
a[i]=l;
x=found(a,"max");
a[x]=a[x]-j;
t+=j;
}
if (a[i]>r)
{
j=a[i]-r;
a[i]=r;
x=found(a,"min");
a[x]=a[x]+j;
t+=j;
}
}
cout<<t;
}
```
### 求帮忙!WA了三个点,70分!!!
by 海滨WA声 @ 2018-02-15 18:24:46
没事、
by 郭光正12138 @ 2018-11-09 19:07:16