AtCoder-ABC 156 - C(结论题/暴力)

本文介绍了一道关于计算数轴上 n 个人移动到同一位置最小花费的问题。通过求解平均值来找到最优解,并提供了一种特殊情况下的解决办法。代码实现使用 C++ 完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C - Rally(结论题/暴力)

题意:

数轴上有 n 个人,将一个人从点 x 移到 p 的花费为(x-p)^{2} ^{},计算将所有人移到同一点的最小花费。

数据范围:

1 ≤ n ≤ 100

1 ≤ x ≤ 100

思路:

结论题:最优位置是n个位置的平均值,如果求平均值时除不尽,就再算平均值+1的位置的结果,取min。

不过这题的数据很小,也可以直接暴力。

Code:

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

#define int long long

const int N = 110;

int n, k;
int a[N];

void solve()
{
	cin >> n;
	int s = 0;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		s += a[i];
	}
	int s1, flag = 0;
	if (s % n)s1 = s / n + 1, flag = 1;
	s /= n;

	int res = 0, res1 = 0;
	for (int i = 1; i <= n; i++)
	{
		res += (s - a[i]) * (s - a[i]);
		if(flag)
			res1+= (s1 - a[i]) * (s1 - a[i]);
	}
	cout << min(res, res1)<<endl;
}

signed main()
{
	int t = 1;
	//cin >> t;
	while (t--)
	{
		solve();
	}

	return 0;
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

吐槽:第一次写博客,之前补题时,就只是把思路当注释写在代码上,之前想的是对于这些不会的题55555,都是看大佬的题解后明白的,还没有打算自己写博客,但是!在看大佬的分享感悟时,提到写博客坚持下去就会有不一样的风景,同时我也感觉之前补题不系统,乱七八糟的balbala……于是乎,决定开始写博客,给我大学珍贵的acmer历程留下些痕迹。                          基本上博客上的题都是看大佬的代码+自己的思考+注释,所以会对大佬的博客有所借鉴。有哪些欠妥的地方,请多多指教^-^。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值