CodeForces 710B Optimal Point on a Line
2024-10-14 19:53:13
递推。
先对$a[i]$进行从小到大排序。
然后计算出每个点左边所有点到这个点的距离之和$L[i]$,以及右边每个点到这个点的距离之和$R[i]$。
这两个都可以递推得到。
$L\left[ i \right] = L\left[ {i - 1} \right] + \left( {i - 1} \right)×(a\left[ i \right] - a[i - 1])$,
$R\left[ i \right] = R\left[ {i + 1} \right] + \left( {n-i} \right)×(a\left[ i+1 \right] - a[i])$。
然后寻找到$L[i]+R[i]$最小的位置,最后输出那个位置即可。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-; const int maxn=3e5+;
LL a[maxn],L[maxn],R[maxn],Min;
int n; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%lld",&a[i]);
sort(a+,a++n); for(int i=;i<=n;i++) L[i]=L[i-]+(i-)*(a[i]-a[i-]);
for(int i=n;i>=;i--) R[i]=R[i+]+(n-i)*(a[i+]-a[i]); Min=; for(int i=;i<=n;i++) if(L[i]+R[i]<L[Min]+R[Min]) Min=i;
printf("%lld\n",a[Min]); return ;
}
最新文章
- Delphi_05_Delphi_Object_Pascal_基本语法_03
- Logback日志系统配置攻略
- iOS中XML的相关知识
- 关于ibatis进行物理游标分页
- MVC5系列——布局视图
- Python3 面向对象程序设计(类)
- Reshape the Matrix
- 安装 Qt 及所需 gcc 等
- 通过实例介绍Android App自动化测试框架--Unittest
- python 基础知识整理
- python基础3 条件判断 if嵌套
- 2018.5.15Html标签初学
- 2014年5月16至24日,杨学明老师为深圳创维RGB事业部提供两天的《软件测试管理》内训服务!
- 4-13 object类,继承和派生( super) ,钻石继承方法
- js,H5本地存储
- 系统信号(signal)与其他(定时器,退出清理等)
- FastList使用
- java字符串常量池——字符串==比较的一个误区
- No.1_NABCD模型分析
- eclipse export runnable jar