http://codeforces.com/gym/101246/problem/J

题意:

给定x轴上的n个点的坐标,按顺序从左到右给出,现在要使得每个点的间距相同,可以移动每个点的坐标,但是不能改变点的相对顺序。求总共最少需要移动多少距离和移动后点的坐标。

思路:

一开始想到用二分搜索,然后枚举一个点为不动点,但是这样我不知道该怎么去改变L、R的值了。。

仔细想想,这道题目所对应的模型图应该是这样的:

中间存在一点可以使移动距离最短,两边很大,因为间距设置的太小和太大都需要移动很多距离。这道题目可以用三分查找做。

三分查找是这样的:

MID=(L+R)/2, MMID=(MID+R)/2

接下去去计算MID和MMID这两个点所对应值,如果cla(MID)>cla(MMID),那么L=mid,否则的话,R=MMID。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn=+;
const double eps=1e-; int n;
int x[maxn]; double MIN;
double ans[maxn];
double p[maxn]; double solve(double dis)
{
double tmmp=INF;
for(int i=;i<=n;i++)
{
double tmp = ;
p[i]=x[i];
for(int j=i-;j>;j--)
{
tmp+=abs(p[j+]-x[j]-dis);
p[j]=p[j+]-dis;
}
for(int j=i+;j<=n;j++)
{
tmp+=abs(x[j]-p[j-]-dis);
p[j]=p[j-]+dis;
} if(tmp<MIN)
{
MIN=tmp;
memcpy(ans,p,sizeof(p));
}
if(tmp<tmmp)
tmmp = tmp;
}
return tmmp;
} int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
//freopen("in.txt","r",stdin);
while(~scanf("%d",&n))
{
for(int i=;i<=n;i++)
scanf("%d",&x[i]); double L = , R=;
for(int i=;i<n;i++)
R=max(R,(double)(x[i+]-x[i])); MIN = INF; while(R-L>=eps)
{
double mid = (L+R)/.;
double mmid = (mid+R)/.;
if(solve(mid)>solve(mmid)) L=mid;
else R=mmid;
} printf("%.4f\n",MIN);
for(int i=;i<=n;i++)
{
printf("%.7f%c",ans[i],i==n?'\n':' ');
}
}
return ;
}

Gym 101246J Buoys(三分查找)的更多相关文章

  1. HDU 5144 NPY and shot(物理运动学+三分查找)

    NPY and shot Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  2. HDU4355 三分查找

    /*  * 三分查找  */ #include<cstdio> #include<cmath> #define eps 1e-6 //typedef __int64 LL; i ...

  3. hdu_2899_Strange fuction(三分查找)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2899 题意:让你解方程 题解:对于只有一个凸或者没有凸的图像,可以直接上三分解决. #include& ...

  4. HDU 2438 Turn the corner(三分查找)

    托一个学弟的福,学了一下他的最简便三分写法,然后找了一道三分的题验证了下,AC了一题,写法确实方便,还是我太弱了,漫漫AC路!各路大神,以后你们有啥好的简便写法可以在博客下方留个言或私信我,谢谢了! ...

  5. 牛客练习赛28 E迎风舞 (三分查找)

    链接:https://www.nowcoder.com/acm/contest/200/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  6. Gym 100792C Colder-Hotter (三分)

    题意:系统有一个点对,让你去猜,每次你猜一个,如果这个数和系统里的那个点距离比上一个你猜的近,那么返回1,否则返回0,第一次猜一定返回0,在不超过500次的情况下,猜出正确答案. 析:是一个简单的三分 ...

  7. 二分查找 && 三分查找

    LeetCode34. Find First and Last Position of Element in Sorted Array 题意:找出指定元素出现的范围,Ologn 思路:两次二分 cla ...

  8. CSU 1548 Design road(三分查找)

    题目链接:https://cn.vjudge.net/problem/142542/origin Description You need to design road from (0, 0) to ...

  9. ZOJ 3203 Light Bulb (三分查找)

    Light Bulb Time Limit: 1 Second      Memory Limit: 32768 KB Compared to wildleopard's wealthiness, h ...

随机推荐

  1. yii2.0 如何按需加载并管理CSS样式及JS脚本

    链接:http://www.yiichina.com/tutorial/399 (注:以下为Yii2.0高级应用测试) Yii2.0对于CSS/JS 管理,使用AssetBundle资源包类. 视图如 ...

  2. DetaSet更新数据

    用到的控件:DataGridView(展示数据),                    Button控件,更名[更新] using System; using System.Collections. ...

  3. pandas读取保存数据

    将本人使用过的一些操作记录下来 1.读取数据,使用:data = pd.read_csv('./data/file.csv') 2.数据处理,如果你要修改某一个数据,其实把DATAFRAME数据看做是 ...

  4. 如何在不改SQL的情况下优化数据库

    主题简介 在数据库运维中我们会遇到各种各样的问题,这些问题的根源可能很明显,也可能被某种表象掩盖而使我们认不清.所以运维面临的两大问题就是,第一我们没有看清本质,第二应用不允许修改.那么我们如何解决这 ...

  5. Maven 的聚合(多模块)和 Parent 继承

    2017年06月26日 21:16:57 Maven 的聚合(多模块)和 Parent 继承 - 偶尔记一下 - CSDN博客 https://blog.csdn.net/isea533/articl ...

  6. ovn-sb 摘要

    1.Database Structure Physical network table中包含了和chassis nodes有关的所有信息,包括用于overlay所需的IP地址,支持的tunnel类型以 ...

  7. 离线安装Chrome 插件

    说明: Postman不多介绍,是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.本文主要介绍下安装过程. 本文使用的是解压文件直接进行安装.是比较快速有效的安装方式 第一步:把下载后 ...

  8. mysql创建和删除表

    创建表 简单的方式 CREATE TABLE person ( ), name ), birthday DATE ); 或者是 CREATE TABLE IF NOT EXISTS person ( ...

  9. Centos7 Zabbix3.2安装

    实验环境: 阿里云 [zabbix@miyan ~]$ cat /etc/redhat-release CentOS Linux release (Core) 不得不说,官方文档确实强大 1.官方文档 ...

  10. Docker学习笔记(一):在本地安装和配置Docker

      由于公司里测试服务器时常会有变动,每次变动之后都需要在新的服务器上配置一遍环境,实在是麻烦.后来我突然想到了在网上看到的资料中说Docker能快速部署可移植的容器,所以我就试着用Docker搭建了 ...