蓝桥杯 付账问题

Problem: 蓝桥杯 付账问题

文章目录

思路

这是一个关于付款问题的题目,我们需要找到一个最优的付款策略,使得每个人付款的金额尽可能接近平均值。我们可以通过排序和贪心的策略来解决这个问题。

解题方法

首先,我们将所有人的付款金额进行排序。然后,我们从最少的金额开始,每次选择一个人进行付款。我们每次都选择当前还未付款的人中,付款金额最少的人进行付款。这样可以保证每个人付款的金额尽可能接近平均值。

在实现上,我们可以使用一个优先队列来维护所有还未付款的人。每次我们都从优先队列中取出付款金额最少的人,然后更新剩余的总金额和人数。我们重复这个过程,直到所有的人都付款完毕。

复杂度

时间复杂度:

O ( n l o g n ) O(n log n) O(nlogn),其中 n 是人的数量。我们需要对所有人的付款金额进行排序,然后使用一个优先队列来维护所有还未付款的人。

空间复杂度:

O ( n ) O(n) O(n),我们需要使用一个数组来存储所有人的付款金额,以及一个优先队列来维护所有还未付款的人。

Code

java 复制代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Arrays;

public class Main {
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	static int MAXN = (int) (5e5 + 10);
	static long[] a = new long[MAXN];
	static int n;
	static double s;

	public static void main(String[] args) throws IOException {
		String[] str = in.readLine().split(" ");
		n = Integer.parseInt(str[0]);
		s = Double.parseDouble(str[1]);
		str = in.readLine().split(" ");
		for (int i = 0; i < n; i++) {
			a[i] = Integer.parseInt(str[i]);
		}
		Arrays.sort(a, 0, n);
		double res = 0, avg = s / n;
		for (int i = 0; i < n; i++) {
			double cur = s / (n - i);
			if (a[i] >= cur) {
				res += (cur - avg) * (cur - avg) * (n - i);
				break;
			}
			s -= a[i];
			res += (a[i] - avg) * (a[i] - avg);
		}
		out.printf("%.4f\n", Math.sqrt(res / n));
		out.flush();

	}

}
相关推荐
XH华6 小时前
备战蓝桥杯,第九章:结构体和类
学习·蓝桥杯
Epiphany.55610 小时前
蓝桥杯备赛题目-----爆破
算法·职场和发展·蓝桥杯
@––––––15 小时前
力扣hot100—系列4-贪心算法
算法·leetcode·贪心算法
_OP_CHEN17 小时前
【算法基础篇】(五十八)线性代数之高斯消元法从原理到实战:手撕模板 + 洛谷真题全解
线性代数·算法·蓝桥杯·c/c++·线性方程组·acm/icpc·高斯消元法
仰泳的熊猫17 小时前
题目1453:蓝桥杯历届试题-翻硬币
数据结构·c++·算法·蓝桥杯
Hello.Reader1 天前
Flink Kubernetes HA(高可用)实战原理、前置条件、配置项与数据保留机制
贪心算法·flink·kubernetes
_OP_CHEN2 天前
【算法基础篇】(五十七)线性代数之矩阵乘法从入门到实战:手撕模板 + 真题详解
线性代数·算法·矩阵·蓝桥杯·c/c++·矩阵乘法·acm/icpc
pp起床2 天前
贪心算法 | part02
算法·leetcode·贪心算法
_OP_CHEN3 天前
【算法基础篇】(五十六)容斥原理指南:从集合计数到算法实战,解决组合数学的 “重叠难题”!
算法·蓝桥杯·c/c++·组合数学·容斥原理·算法竞赛·acm/icpc