Acwing---1235. 付账问题

news2025/1/16 18:43:24

付账问题

  • 1.题目
  • 2.基本思想
  • 3.代码实现

1.题目

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

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

现在有 n n n个人出去吃饭,他们总共消费了 S S S元。

其中第 i i i 个人带了 a i ai ai元。

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

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

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

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

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

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

在这里插入图片描述

输入格式
第一行包含两个整数 n、S;

第二行包含 n 个非负整数 a1, …, an。

输出格式
输出最小的标准差,四舍五入保留 4 位小数。

数据范围
1 ≤ n ≤ 5 × 1 0 5 1≤n≤5×10^5 1n5×105 ,
0 ≤ a i ≤ 1 0 9 0≤ai≤10^9 0ai109,
0≤S≤10^15。

输入样例1:

5 2333
666 666 666 666 666

输出样例1:

0

输入样例2:

10 30
2 1 4 7 4 8 3 6 4 7

输出样例2:

0.7928

2.基本思想

贪心

首先我们要知道标准差表示的是数据的波动程度,其值越大波动越大。要使得标准差小,我们就要尽可能使得数据都比较接近平均值。
贪心策略:
首先算出平均值s/n,把数据从小到大排序,如果某个人的钱低于该值,那么他一定是将钱全部支付,然后其余不够的其他人平摊。
但是,由于之前那个人钱不够,那么就会导致剩下人支付的平均值会增大,所以在这个平摊过程中很有可能存在某个人钱又低于这个平均值,又需要剩下的人平摊。如此反复,直到支付完成。

3.代码实现

import java.util.Arrays;
import java.util.Scanner;

public class _1235付账问题 {
    static Scanner sc = new Scanner(System.in);
    static int N = 500010;
    static int a[] = new int[N];

    public static void main(String[] args) {
        int n = sc.nextInt();
        double s = sc.nextDouble();
        for (int i = 1; i <= n; i++) a[i] = sc.nextInt();
        Arrays.sort(a, 1, n + 1);//按钱数 从小到大排序

        double avg = s / n, res = 0;
        for (int i = 1; i <= n; i++) {
            double cur = s / (n - (i - 1));//当前元素 出的钱
            if (a[i] < cur) {
                cur = a[i];//当前元素出不起的话 就出a[i]所有即可
                res += (cur - avg) * (cur - avg);
                s -= cur;
            } else {//当前元素开始 都出的起剩余钱
                res += (cur - avg) * (cur - avg) * (n - i + 1);
                break;
            }
        }
        System.out.println(String.format("%.4f", Math.sqrt(res / n)));
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/335454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue解决跨域问题-反向代理

浏览器有同源策略&#xff0c;限制同协议、同域名、同端口&#xff0c;只要有一项不一致&#xff0c;就是跨域。&#xff08;不同源则跨域&#xff09; 解决方案&#xff1a; 后端 、cors 、 jsonp、 反向代理 同源下&#xff1a;浏览器向服务器请求数据&#xff0c;服务器响应…

jenkins +docker+python接口自动化之docker下安装jenkins(一)

jenkins dockerpython接口自动化之docker下安装jenkins&#xff08;一&#xff09; 目录&#xff1a;导读 1、下载jenkins 2、启动jenkins 3、访问jenkins 4.浏览器直接访问http://ip/:8080 5.然后粘贴到输入框中,之后新手入门中先安装默认的插件即可&#xff0c;完成后出…

俄罗斯方块游戏代码

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽…

图表控件LightningChart .NET再破世界纪录,支持实时可视化 1 万亿个数据点

LightningChart.NET SDK 是一款高性能数据可视化插件工具&#xff0c;由数据可视化软件组件和工具类组成&#xff0c;可支持基于 Windows 的用户界面框架&#xff08;Windows Presentation Foundation&#xff09;、Windows 通用应用平台&#xff08;Universal Windows Platfor…

数据可视化大屏百度地图绘制行政区域标注实战案例解析(个性化地图、标注、视频、控件、定位、检索)

百度地图开发系列目录 数据可视化大屏应急管理综合指挥调度系统完整案例详解&#xff08;PHP-API、Echarts、百度地图&#xff09;数据可视化大屏百度地图API开发&#xff1a;停车场分布标注和检索静态版百度地图高级开发&#xff1a;map.getDistance计算多点之间的距离并输入…

元宵晚会节目预告没有岳云鹏,是不敢透露还是另有隐情

在刚刚结束的元宵节晚会上&#xff0c;德云社的岳云鹏&#xff0c;再一次参加并引起轰动&#xff0c;并获得了观众朋友们的一致好评。 不过有细心的网友发现&#xff0c;早前央视元宵晚会节目预告&#xff0c;并没有看到小岳岳&#xff0c;难道是不敢提前透露&#xff0c;怕公布…

TCP 三次握手和四次挥手

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录TCP 建立连接(三次握手)为啥不能是 4 次&#xff1f;为啥不能是 2 次&#xff1f;三次握手的意义&#xff1a;TCP 断开连接(四…

前端报表如何实现无预览打印解决方案或静默打印

在前端开发中&#xff0c;除了将数据呈现后&#xff0c;我们往往需要为用户提供&#xff0c;打印&#xff0c;导出等能力&#xff0c;导出是为了存档或是二次分析&#xff0c;而打印则因为很多单据需要打印出来作为主要的单据来进行下一环节的票据支撑&#xff0c; 而前端打印可…

Android Binder机制之一(简介)

目录 前言 一、Android 进程间通信方式 二、Binder架构图 三、Binder涉及角色 3.1 Binder驱动 3.2 Binder实体 3.3 Binder引用 3.4 远程服务 3.5 ServiceManager守护进程 四、涉及源码 前言 这是本人第N次看Binder 相关知识了&#xff0c;其实每次看都有新的收获&…

Docker搭建本地私有仓库

目录 一、本地私有仓库的优点 二、Docker搭建本地私有仓库 2.1、首先下载 registry 镜像 2.2、在 daemon.json 文件中添加私有镜像仓库地址 2.3、运行 registry 容器 2.4、Docker容器的重启策略 2.5、为镜像打标签 2.6、上传到私有仓库 2.7、私有仓库的 centos 镜像有…

Cubox是什么应用?如何将Cubox同步至Notion、语雀、在线文档中

Cubox是什么应用&#xff1f; Cubox 是一款跨平台的网络收藏工具&#xff0c;通过浏览器扩展、客户端、手机应用、微信转发等方式&#xff0c;将网页、文字、图片、语音、视频、文件等内容保存起来&#xff0c;再经过自动整理、标签、分类之后&#xff0c;就可以随时阅读、搜索…

02- pandas 数据库 (数据库)

pandas 数据库重点: pandas 的主要数据结构: Series (一维数据)与 DataFrame (二维数据)。 pd.DataFrame(data np.random.randint(0,151,size (5,3)), # 生成pandas数据 index [Danial,Brandon,softpo,Ella,Cindy], # 行索引 …

windeployqt实现一键打包

每次发布QT程序前,都必须要在命令行环境下运行windeployqt 工具进行打包,加载相关的lib文件,才能正常运行。但是在命令行模式下,每次都要手动输入windeployqt的目录,和应用程序的位置目录,效率非常低,见下图: 那QT有没有什么好用的工具可以避免这个问题呢,认真找了一下…

前端如何实现将多页数据合并导出到Excel单Sheet页解决方案|内附代码

前端与数据展示 前后端分离是当前比较盛行的开发模式&#xff0c;它使项目的分工更加明确,后端负责处理、存储数据;前端负责显示数据.前端和后端开发人员通过接口进行数据的交换。因此前端最重要的能力是需要将数据呈现给用户后&#xff0c;与终端用户进行交互。 在前端拿到数…

【Linux】宝塔面板 SSL 证书安装部署

宝塔面板 SSL 证书安装部署前言证书下载宝塔配置SSL注意事项前言 前期有讲过Tomcat和Nginx分别部署SSL证书&#xff0c;但也有好多小伙伴们私信我说&#xff0c;帮忙出一期宝塔面板部署SSL证书的教程&#xff0c;毕竟宝塔的用户体量也是蛮大的&#xff0c;于是宠粉的博主&…

基于地基激光雷达数据和深度学习的Faster R-CNN的橡胶树个体分割

Paper题目&#xff1a;Individual Rubber T ree Segmentation Based on Ground-Based LiDAR Data and Faster R-CNN of Deep Learning Abstract 中国南方的橡胶树经常受到可能导致树体倾斜的自然干扰的影响。从扫描点云中对单个橡胶树进行准确的树冠分割是准确检索树参数的必…

前端 ES6 之 Promise 实践应用与控制反转

Promise 主要是为解决程序异步处理而生的&#xff0c;在现在的前端应用中无处不在&#xff0c;已然成为前端开发中最重要的技能点之一。它不仅解决了以前回调函数地狱嵌套的痛点&#xff0c;更重要的是它提供了更完整、更强大的异步解决方案。 同时 Promise 也是前端面试中必不…

玩转系统|初遇ChatGPT,我和TA的第一次约会

最近互联网圈子有一个非常火爆的话题ChatGPT&#xff0c;短短一周的时间就有上百万的用户&#xff0c;如果你不是程序员&#xff0c;也许会问这到底是个什么玩意&#xff1f;ChatGPT是什么&#xff1f;ChatGPT&#xff0c;美国“开放人工智能研究中心”研发的聊天机器人程序 [1…

CAPL(vTESTStudio) - DoIP - TCP接收_04

TCP接收 函数介绍 TcpOpen函数

LeetCode刷题系列 -- 59. 螺旋矩阵 II

给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1&#xff1a;输入&#xff1a;n 3输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a;输入&#xff1a;n 1输出&#xff1…