洛谷P1109 学生分组

题目大意:

       n组学生,开始第i组有ai个人,要使每组人数在[r,l]上,问最少移动多少个学生?(若不存在输出-1)(很迷的数据范围n<=50)

思路:

      //洛谷上说这是普及-,但我想了好久。

     先判是否存在。

      若存在:

  1. 计算所有超出的组总共至少超了多少(记为a);
  2. 计算不够的组总共至少要补多少(c);
  3. 用超出的补不够的是否够用,若不够用还要多少(x);

可能有点乱,其实就是ans=max(a,c);

 1 #include<cstdio>
 2 #include<algorithm>
 3 
 4 using namespace std;
 5 
 6 int n,ans,big,sum,l,cnt,r;
 7 int cn,small;
 8 int per[100];
 9 
10 int main()
11 {
12     scanf("%d",&n);
13     for(int i=1;i<=n;i++)
14     {
15         int tem;
16         scanf("%d",&tem);
17         sum+=tem;
18         per[i]=tem;
19     }
20     scanf("%d%d",&l,&r);
21     for(int i=1;i<=n;i++)
22     {
23         if(per[i]>r)
24         {
25             big+=per[i];
26             cnt++;
27         }
28         if(per[i]<l)
29         {
30             small+=per[i];
31             cn++;
32         }
33     }
34     double geshu=sum;
35     geshu/=n;
36     if((geshu<l)||(geshu>r))
37     {
38         printf("-1\n");
39         return 0;
40     } 
41     ans=max(big-r*cnt,l*cn-small);
42     printf("%d\n",ans);
43     return 0;
44 }
View Code

 

转载于:https://www.cnblogs.com/LiqgNonqfu/p/9738892.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值