zoukankan      html  css  js  c++  java
  • Codeforces Round #510 (Div. 2)(A)

    传送门:Problem A

    https://www.cnblogs.com/violet-acmer/p/9682082.html

    题意:

      公园里有n个沙滩,a[i]表示第i个沙滩初始人数,现有m个人可以到任意沙滩,在这m个人全部到达任意沙滩后,求沙滩最多人数的最大值和最小值

      例如:

      假设有n=5,m=3

      a[i] = :1 2 3 4 5

      沙滩人数最大化便是这m个人全到第5个沙滩上,a[5]=8,当前所有沙滩的最大值为8

      使沙滩人数最大值尽量最小化,第一个人可以来到第一个沙滩,第二个人来到第二个,第三个人来到第三个,此时当前所有沙滩最大值为5

      或这3个人全来到第一个沙滩,第一个沙滩的总人数为4,故此时最大值还是5

      但若有任意一人来到第五个沙滩,则最大值就变成了6 > 5

    题解:

      易得最大值最大化便是当前沙滩最大人数+m;

      最小化:这m个人优先来到最大值之外的其余沙滩,如果所有沙滩的人数都变成了起初值最大的那个沙滩的人数,则将剩余的人平均分到这n个沙滩上

    AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 const int maxn=110;
     6 
     7 int n,m;
     8 int a[maxn];
     9 
    10 void Initial()
    11 {
    12     scanf("%d%d",&n,&m);
    13     for(int i=1;i <= n;i++)
    14         scanf("%d",&a[i]);
    15 }
    16 void Process()
    17 {
    18     sort(a+1,a+n+1);
    19     int res=m;
    20     for(int i=1;i < n;++i)
    21         res -= (a[n]-a[i]);
    22     if(res <= 0)
    23         printf("%d %d
    ",a[n],a[n]+m);
    24     else//如果res 有剩余
    25     {
    26         int k=res/n;//平均每个沙滩有k个人新加入
    27         printf("%d %d
    ",a[n]+k+(res%n == 0 ? 0:1),a[n]+m);
    28     }
    29 }
    30 int main()
    31 {
    32     Initial();
    33     Process();
    34 }
    View Code

      

  • 相关阅读:
    Spring Batch与ETL工具比较
    Spring Batch基本概念
    SpringBatch介绍
    2019第51周日
    用arthas的watch方法观察执行方法的输入输出
    三人行必有我师
    用arthas查看JVM已加载的类及方法信息
    线上问题排查利器Arthas
    换个视觉
    Java Servlet:服务器小程序
  • 原文地址:https://www.cnblogs.com/violet-acmer/p/9682239.html
Copyright © 2011-2022 走看看