题:付账问题

news2024/9/30 21:19:46

1235. 付账问题 - AcWing题库

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

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

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

其中第 ii 个人带了 aiai 元。

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

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

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

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

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

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

输入格式

第一行包含两个整数 n、Sn、S;

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

输出格式

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

数据范围

1≤n≤5×1051≤n≤5×105,
0≤ai≤1090≤ai≤109,
0≤S≤10150≤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

对于每个 a[i],若a[i]>s/n,那么这个人就出s/n的钱;若a[i]<s/n,那么这个人就出a[i]的钱,让剩余几人均摊s/n-a[i]的钱。

有了大体思路,这里可以用均值不等式来证明贪心策略最优(证明略)。

由于每个a[i]的值都会影响以后的决策,所以将s/n动态计算即可。

for(int i=0; i<n; i++){
    double cur = s/(n-i);//cur是当前应该均摊的钱数
    if(f[i]<cur) cur = f[i];
    s -= cur;//若钱够,则直接减去均摊的那一份;若不够,则让后面的人均摊差值
}

另外,由于给出的序列每个人的钱数有多有少,考虑一下极端情况,若钱数是降序,则前面钱多的不能均摊,后面钱少的无人均摊。所以按升序排列。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

const int N = 5e5+10;

int f[N];

int main(){
    int n;
    long double s;//由于数据范围是1e15,所以用到long double
    cin>>n>>s;
    for(int i=0; i<n; i++) scanf("%d",&f[i]);
    
    long double avg = s/n, ans = 0;
    
    sort(f,f+n);
    
    for(int i=0; i<n; i++){
        double cur = s/(n-i);
        if(f[i]<cur) cur = f[i];
        s -= cur;
        ans += pow(cur-avg,2);//求平方和,最后输出时计算一下方差
    }
    
    printf("%.4Lf", sqrt(ans/n));//long double输出使用Lf
    
    return 0;
}

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

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

相关文章

ctf笔记:php

ctf笔记&#xff1a;php 博客链接&#xff1a;https://www.blog.23day.site/articles/80 语法 攻防世界&#xff1a;easy_php 攻防世界&#xff1a;simple_php $a $b等于TRUE&#xff0c;如果类型转换后 $a 等于 $b。$a $b全等TRUE&#xff0c;如果 $a 等于 $b&#xff0c…

【封神台】辛巴猫舍-SQL注入

本节学习目标&#xff1a; 判断是否存在SQL漏洞&#xff0c;以便注入获取数据库的内容本节需知&#xff1a; SQL注入%20为空格的url代码环境为打靶环境1. 判断是否存在SQL漏洞 http://cntj8003.ia.aqlab.cn/index.php?id1%20and%2011 http://cntj8003.ia.aqlab.cn/index.php…

注册VMware虚拟机时报错“指定的项、名称或标识符已存在“

环境 VMware虚拟化平台 问题描述 收到业务侧报障&#xff0c;多台Linux虚拟机无法登录。经查询&#xff0c;报障的Linux操作系统均部署在VMware虚拟化平台&#xff0c;承载的宿主机已宕机且无法启动&#xff0c;虚拟机为断连状态。虚拟机移除清单&#xff0c;离线迁移&#…

图片识别转公式,GitHub 又一 LaTeX 神器面世

​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 只需要把公式图片用鼠标拖动到工具内&#xff0c;就能一键转成 LaTex 公式。 写论文、做研究时&#xff0c;最让你头疼的是什么&#xff1f;想必公式编辑会榜上有名。那么有没有便捷的…

<Linux进程通信之管道>——《Linux》

目录 一、进程通信 1.进程间通信介绍 2.进程间通信目的 3.进程间通信发展 4.进程间通信分类 二、管道 1.什么是管道 2.匿名管道 3.用fork来共享管道原理 4.站在文件描述符角度-深度理解管道​编辑 5.编程模拟实现父子进程在管道读写通信​编辑 6.进程控制&#xff…

【DevOps实战系列】第一章:详解DevOps运行环境

个人亲自录制全套DevOps系列实战教程 &#xff1a;手把手教你玩转DevOps全栈技术 DevOps是什么&#xff1f; DevOps&#xff08;Development和Operations的组合词&#xff09;是一种重视“软件开发人员&#xff08;Dev&#xff09;”和“IT运维技术人员&#xff08;Ops&#x…

子序列的权值最小值

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 给定一个长度为 nnn 的数组 aaa&#xff0c;求数组所有非空子序列权值的最小值。 定义子序列 ai,aj,…,aka_i,a_{j},\dots,a_kai​,aj​,…,ak​ 的权值为 其中 &\&& 为二进制中…

Nat. Commun. | 基于最优传输的单细胞数据集成统一计算框架

本文介绍由同济大学控制科学与工程系的洪奕光和中国科学院数学与系统科学研究院的万林共同通讯发表在 Nature Communications 的研究成果&#xff1a;单细胞数据集成可以提供细胞的全面分子视图。然而&#xff0c;如何整合异质性单细胞多组学以及空间分辨的转录组学数据仍然是一…

Linux C编程一站式学习笔记3

lLinux C编程一站式学习笔记 chap3 简单函数 文章目录lLinux C编程一站式学习笔记 chap3 简单函数一.数学函数C标准库和glibc二.自定义函数三.形参和实参Man Page习题四.全局变量、局部变量和作用域局部变量 local variable全局变量 global variable全局变量和局部变量重名的情…

【linux】linux centos 6 日志服务、rsyslogd日志服务

1.概述 在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务。rsyslogd日志服 务更加先进,功能更多。但是不论该服务的使用,还是日志文件的格式其实都是和 syslogd服务相兼容的,所以学习起来基本和syslogd服务一致。 rsyslogd的新特点: 基于TCP网络协议传输日志…

测试人,为什么建议你要去大厂看一下,绝不仅仅是为了薪资和面子

&#x1f4cc; 博客主页&#xff1a; 程序员二黑 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 公号同名&#xff0c;欢迎加入我的测试交流群&#xff0c;我们一起交流学习&#xff01; 之前…

python数据容器分类

目录 一.数据容器可以从以下视角进行简单的分类: 1.是否支持下标索引 2.是否支持重复元素: 3.是否可以修改 二.数据容器特点对比 三.数据容器的通用操作 1.遍历 2.len(容器)、max(容器)、min(容器) 3.类型转换 注意 4.排序 一.数据容器可以从以下视角进行简单的分类:…

Clipper库 | 坐标圆整和精度控制

坐标圆整造成的问题 在Clipper库中顶点&#xff08;IntPoint&#xff09;的坐标使用的是整数类型&#xff0c; 目的是为了保持数字的鲁棒性&#xff0c;所以用整数类型来存储坐标&#xff0c;而不是我们常见的浮点数类型&#xff08;浮点存在不精确性&#xff09;。然而坐标圆…

Kerberos身份验证在ChunJun中的落地实践

Kerberos&#xff0c;在古希腊神话故事中&#xff0c;指的是一只三头犬守护在地狱之门外&#xff0c;禁止任何人类闯入地狱之中。 那么在现实中&#xff0c;Kerberos指的是什么呢&#xff1f; 一、Kerberos介绍 01 Kerberos是什么 根据百度词条释义&#xff0c;Kerberos是一…

Java——并查集

概念 当我们将多个元素分配到不同的集合中&#xff0c;这些集合有的是相关的&#xff0c;有的是不相关的。并查集就是用来查找两个元素是否在同一个集合中的 其主要实现方式是&#xff1a;将所有的元素以下标的形式存储在数组中。例如一共有十个人&#xff0c;那么就将这些人…

C语言tips-野指针

0.写在最前 最近因为工作需要开始重新学c语言&#xff0c;越学越发现c语言深不可测&#xff0c;当初用python轻轻松松处理的一些数据&#xff0c;但是c语言写起来却异常的复杂&#xff0c;这个板块就记录一下我的c语言复习之路 1. 什么是野指针&#xff1f; 如果一个指针指向的…

一文带你深入理解【Java基础】· IO流(上)

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

机器学习100天(五):005 数据预处理之划分训练集

机器学习100天,今天讲的是:数据预处理之划分训练集。 在上一节,我们对类别特征进行了编码,X 和 y 已经变成了机器学习可以理解和处理的数据格式。 下面我们就要对数据集进行划分,划分成训练集和测试集。 在监督式机器学习中,我们一般使用训练集的数据来训练模型,然后…

【LVGL学习笔记】(二) 基础概念

LVGL全程LittleVGL&#xff0c;是一个轻量化的&#xff0c;开源的&#xff0c;用于嵌入式GUI设计的图形库。并且配合LVGL模拟器&#xff0c;可以在电脑对界面进行编辑显示&#xff0c;测试通过后再移植进嵌入式设备中&#xff0c;实现高效的项目开发。 LVGL中文教程手册&#…

心理健康网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 管理员功能&#xff1a; 1、管理关于我们、联系我们 2、管理文章类型、添加心理文章 3、审核咨询师注册信息 4、查看咨询…