(Java)付账问题
创始人
2025-05-31 21:33:31
0

付账问题

      • 一、题目
      • 二、输入输出
      • 三、代码及解析

一、题目

几个人一起出去吃饭是常有的事。

但在结帐的时候,常常会出现一些争执。

现在有 n个人出去吃饭,他们总共消费了S元。其中第i个人带了 ai元。

幸运的是,所有人带的钱的总数是足够付账的,但现在问题来了:每个人分别要出多少钱呢?

为了公平起见,我们希望在总付钱量恰好为S的前提下,最后每个人付的钱的标准差最小。

这里我们约定,每个人支付的钱数可以是任意非负实数,即可以不是1分钱的整数倍。

你需要输出最小的标准差是多少。

标准差的介绍:标准差是多个数与它们平均数差值的平方平均数,一般用于刻画这些数之间的“偏差有多大”。

形式化地说,设第i个人付的钱为bi元,那么标准差为 :

在这里插入图片描述

二、输入输出

  • 输入格式:第一行包含两个整数 n、S;第二行包含 n 个非负整数 a1, …, an
  • 输出格式:出最小的标准差,四舍五入保留 4 位小数
  • 数据范围:1 ≤ n ≤ 5 × 10 ^ 5 ,0 ≤ ai ≤ 10 ^ 9,0≤S≤1015
  • 输入样例1:
5 2333
666 666 666 666 666
  • 输出样例1:
0.0000
  • 输入样例2:
10 30
2 1 4 7 4 8 3 6 4 7
  • 输出样例2:
0.7928

三、代码及解析

import java.util.Arrays;
import java.util.Scanner;public class Main {public static int N = 500010;//1≤n≤5×10^5public static long[] a = new long[N];//记录第i个人带了a[i]元public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();//一共有n个人long s = sc.nextLong();//共消费了s元for (int i = 1; i <= n; i++) {a[i] = sc.nextLong();}Arrays.sort(a,1,n+1);//将每个人带来的钱从小到大排序double result = 0.0;//用来记录最终结果double average = 1.0 * s / n;//用来记录每个人平均下来应该带多少钱for (int i = 1; i <= n; i++) {//遍历每一个人//筛选出需要把钱全部拿出来的//(1)钱不够平均数的//(2)钱够平均数但不是很多的//由于钱数是从小到大排的,所以://第i个人带的钱 * (从i到n一共还有多少人)的值如果小于剩下的还需要付的钱//即a[i]*(n-i+1)<=s(s通过循环会不断更新的,始终表示剩余的钱数)if (a[i] * (n-i+1) < s){//求标准差的公式result += Math.pow(a[i] - average,2);//累加方差s -= a[i];//更新剩余钱数}else {//剩下的不用把钱全部拿出来的人:钱非常多,不管怎么平均都够double cur_average = 1.0 * s / (n-i+1);//求剩下的富人们平均应该带的钱数result += Math.pow(cur_average - average,2)*(n-i+1);//直接可以算出剩下所以富人们的方差break;//跳出循环}}System.out.print(String.format("%.4f",Math.sqrt(result/n)));sc.close();}
}

在这里插入图片描述

  • 代码纯享版
import java.util.Arrays;
import java.util.Scanner;public class Main {public static int N = 500010;public static long[] a = new long[N];public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();long s = sc.nextLong();for (int i = 1; i <= n; i++) {a[i] = sc.nextLong();}Arrays.sort(a,1,n+1);double result = 0;double average = 1.0 * s / n;for (int i = 1; i <= n; i++) {if (a[i] * (n-i+1) < s){result += Math.pow(a[i]- average,2);s -= a[i];}else {double cur_average = 1.0 * s / (n-i+1);result += Math.pow(cur_average - average , 2) * (n-i+1);break;}}System.out.print(String.format("%.4f",Math.sqrt(result/n)));}
}

相关内容

热门资讯

淄川生态村里游客多 淄川生态村... 5月28日,游客正在淄博市淄川区太河镇下端士村采摘甜杏。位于峨庄古村落国家森林公园里的下端士村地处深...
潮汕最佳5天4晚详细旅游攻略,... 潮汕,这片位于广东省东部的神秘土地,以其悠久的历史、独特的文化和令人垂涎的美食而闻名遐迩。无论是漫步...
粉肠鲜嫩秘诀:这样做,让你爱不... 粉肠作为一道传统的中华美食,因其独特的口感和鲜美的味道而深受喜爱。然而,很多人在制作粉肠时,总是难以...
炒牛肉又老又柴?腌制方法对了,... 每次下馆子吃到滑嫩如豆腐的炒牛肉,是不是总怀疑厨师偷偷给肉片施了魔法?今天咱们就揭开这个厨房秘密——...
夏日犯困没精神?建议中老年人常... 夏日炎炎,中老年人常常会感到犯困、没精神,身体的乏力感也随之而来。其实,通过合理的饮食调理,可以有效...
北京小众玩法推荐|4天3晚路线... 北京,这座古老与现代交织的城市,总是以其独特的魅力吸引着世界各地的游客。作为中国的首都,北京不仅拥有...
夏天到了,没食欲,6道超下饭的... 01 豆角炒鸡蛋 厨房小白版:食材:长豆角,鸡蛋,蒜制作步骤:1. 处理食材:长豆角洗净切丁,鸡蛋...
“饼” 纷世界:台湾手抓饼与天... 在美食的江湖里,有两款饼堪称 “话题担当”,它们模样相似,口感相近,却有着截然不同的身世,这便是台湾...
长春又一夜市正式营业 复古灯牌鳞次栉比、 各种烧烤香味扑鼻、海盗船 大秋千惊险刺激 …… 5月30日晚, 集美食、文创、娱...
分享3道既能减脂又下饭的家常菜... 减脂期总与"寡淡无味"挂钩?其实,低卡与美味从来不是对立面。今天分享的三道家常菜,用精准的食材搭配和...
海口市秀英区火山荔枝季农文旅市... 火山荔枝王遇海浪,一口鲜爽过端阳。5月31日,伴着浓浓的粽香氛围,迎着徐徐海风,海口市秀英区火山荔枝...
《国家名厨》人物:赵宝祥 中国... 赵宝祥,男,汉族,1966年3月出生,江苏扬州人,中式烹调高级技师,国家名厨,中国烹饪大师,江苏省烹...
“湿气不除,越补越毒”端午后,... 端午过后,天气愈发闷热潮湿,湿气这个“隐形杀手”悄然来袭。民间有云“湿气不除,越补越毒”,此时若不及...
人到中年别太节俭,多吃这几道菜... 人到中年,身体的各项机能逐渐发生变化,健康成了生活的重中之重。此时,合理的饮食搭配显得尤为关键。别再...
原创 漫... 炸馓子 成名原因:又称馓子麻花、环饼,是老北京小吃的花色品种之一。 成品色泽金黄,酥脆,甜香可口。 ...
春天是进补黄金期,可以多吃这八... 春天,大地复苏,万物生长,是大自然给予我们身体调养的黄金时期。在这个生机勃勃的季节里,合理饮食、荤素...
原创 炸... 炸萝卜丸子,别只会放面粉,教你一招,出锅外酥里软,一点都不硬 萝卜是我们常见的一种蔬菜,富含膳食纤维...
潮汕五日游攻略大全,情侣去潮汕... 潮汕地区,这片充满烟火气与文化底蕴的土地,一直是我心心念念的旅行目的地。它不仅有着独特的文化传统,还...
扬州瘦西湖:二十四桥明月夜,春... 扬州瘦西湖以其婉约秀丽的风光闻名遐迩,在春日时节,这里不仅有 “二十四桥明月夜” 的诗意古韵,更增添...
重庆五日游旅游攻略,重庆玩五天... 重庆,这座充满魔幻色彩的城市,以其独特的地形、丰富的文化和诱人的美食吸引着无数游客。无论是穿梭于错综...