码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #510 (Div. 2)(A)

时间:2018-09-20 18:04:36      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:color   targe   mes   print   ons   style   技术分享   i++   html   

传送门: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\n",a[n],a[n]+m);
24     else//如果res 有剩余
25     {
26         int k=res/n;//平均每个沙滩有k个人新加入
27         printf("%d %d\n",a[n]+k+(res%n == 0 ? 0:1),a[n]+m);
28     }
29 }
30 int main()
31 {
32     Initial();
33     Process();
34 }
View Code

 

  

Codeforces Round #510 (Div. 2)(A)

标签:color   targe   mes   print   ons   style   技术分享   i++   html   

原文地址:https://www.cnblogs.com/violet-acmer/p/9682239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!