题目如下:
思路:
1.人数超过了上限或者下限,直接输出-1 这时候代码就结束了
2.想要达到我过去 你过来
需要把过去的数量全部相加 (不是说我过去了,你就可以不用过去了,不在范围就是不在范围)
与此同时 需要把过来的全部相加
两者取最大值
代码如下:
#include<cstdio> #include<iostream> using namespace std; int main(){ int c=0,b=0,n,sum=0,l,r; cin>>n; int a[n]; for(int i=0;i<n;i++){ cin>>a[i]; sum+=a[i]; } cin>>l>>r; if(sum>r*n){ cout<<"-1"; return 0; } if(sum<l*n){ cout<<"-1"; return 0; } for(int i=0;i<n;i++) { if(a[i]>r) c+=a[i]-r; if(a[i]<l) b+=l-a[i]; } cout<<max(c,b); return 0; } //3 //20 8 6 //10 15 //5 2 4 //3 //10 20 30 //1 18