AOJ-problem-853
来源:互联网 发布:二代身份证识别器java 编辑:程序博客网 时间:2024/05/21 16:11
SLF 改造计划
Description
俗话说得好,精卫填海,LF 平山。作为处女座的 SLF 强迫症有很多,他学成后买下一个荒无人烟的山丘地带,但是山的高度很是令他烦恼,于是他决定要用最小的代价让最高的山峰与最低的山峰的高度差不超过 17,SLF 经过调查,已知第 i 座山峰高度为 a[i],由于填山或是平山都需要代价,SLF 询问了专业人员,将高度为 a[i]的山峰改造成高度为 x 的山峰的代价为(a[i] – x)^ 2,经过苦难的他深知赚钱的不容易,所以他希望代价最小。
Input
第一行一个数 n。
接下来 n 行每行一个整数 a[i](0 ≤ a[i] ≤ 100),表示山峰高度。
接下来 n 行每行一个整数 a[i](0 ≤ a[i] ≤ 100),表示山峰高度。
Output
一行一个整数,最小的代价
思路:
本来以为不可以让山变高的。
暴力:经过我们的改造,这些山的高度在一个区间长度不大于17的范围内,我以区间内的最高山(R)为基准,改造后的所有山的高度在区间[R-17,R],以最低山为基准自然也可以。
优化:(三分)
#include<iostream>using namespace std;#include<cmath>#include<algorithm>const int length=1000+10;int a[length],n;int cost(int one,int two){ if(two>one)return (two-one)*(two-one);elseif(two+17<one)return (one-17-two)*(one-17-two);else return 0;}int sum(int num){int s=0;for(int i=0;i<n;i++)s+=cost(num,a[i]);return s;}int main(){cin>>n;for(int i=0;i<n;++i) cin>>a[i];sort(a,a+n);int l=a[0],r=a[n-1],lmid,rmid;while(l+2<r){lmid=(2*l+r)/3,rmid=(l+2*r)/3;if(sum(lmid)<sum(rmid)) r=rmid;else l=lmid;}int ans=sum(l);for(int i=l+1;i<=r;++i) ans=min(ans,sum(i));cout<<ans;cin.get();cin.get();return 0;}
0 0
- AOJ-problem-853
- AOJ-problem-849
- AOJ-problem-850
- AOJ-problem-851
- AOJ-problem-829
- AOJ-problem-854
- AOJ-problem-883
- AOJ-problem-879
- AOJ-problem-873
- AOJ-problem-874
- AOJ-problem-801
- AOJ-problem-802
- AOJ-problem-805
- AOJ-problem-806
- AOJ-problem-09
- AOJ-problem-894
- AOJ Problem NO.335 三角形
- AOJ problem 6 Hero In Maze
- Java内部类
- C++与C之比较
- 什么情况下应进行血液透析?
- 线性时间选择
- 用户评论标签的抽取
- AOJ-problem-853
- LeetCode 64 Minimum Path Sum
- centos 6.5搭建vsftp虚拟用户
- xampp 配置laravel5.4环境
- 如何启动、关闭和设置ubuntu防火墙
- 蓝桥杯 基础练习 特殊的数字 JAVA
- MySQL5.7 重置root密码
- qt+mysql 制作简易的图书管理系统的一些知识点
- 没有理想,你和我还有什么区别呢!