P1109 学生分组

题目如下:

 

 思路:

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

 

posted @ 2020-05-07 11:46  miao-xixixi  阅读(173)  评论(0编辑  收藏  举报