首页 > 其他 > 详细

P1109 学生分组

时间:2019-09-11 00:28:27      阅读:149      评论:0      收藏:0      [点我收藏+]

题目描述

有N组学生,给出初始时每组中的学生个数,再给出每组学生人数的上界R和下界L(LR),每次你可以在某组中选出一个学生把他安排到另外一组中,问最少要多少次才可以使N组学生的人数都在[L,R]中。

输入格式

第一行一个整数N,表示学生组数; n50

第二行N个整数,表示每组的学生个数;

第三行两个整数L,R,表示下界和上界。

输出格式

一个数,表示最少的交换次数,如果不能满足题目条件输出 1

输入输出样例

输入 #1
2
10 20
10 15
输出 #1
5


#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
int read(){
	int a=0,b=1;
	char ch=getchar();
	while((ch<48||ch>57)&&ch!=‘-‘){
		ch=getchar();
	}
	if(ch==‘-‘){
		b=-1;
		ch=getchar();
	}
	while(ch<48||ch>57){
		ch=getchar();
	}
	while(ch>47&&ch<58){
		a=a*10+ch-48;
		ch=getchar();
	}
	return a*b;
}
int n,l,r,a,b,sum,s[110];
int main(){
    n=read();
    for(int i=1;i<=n;i++){
		s[i]=read();
		sum+=s[i];
	}
    l=read(),r=read();
    for(int i=1;i<=n;i++){
        if(s[i]>r){a+=s[i]-r;}
        if(s[i]<l){b+=l-s[i];}
    } 
    if(sum>n*r){
		printf("-1");
		return 0;
	}
	printf("%d",max(a,b));
    return 0;
} 

  

P1109 学生分组

原文:https://www.cnblogs.com/xiongchongwen/p/11503901.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!