C - Rally(结论题/暴力)
题意:
数轴上有 n 个人,将一个人从点 x 移到 p 的花费为
,计算将所有人移到同一点的最小花费。
数据范围:
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历程留下些痕迹。 基本上博客上的题都是看大佬的代码+自己的思考+注释,所以会对大佬的博客有所借鉴。有哪些欠妥的地方,请多多指教^-^。