CF30D

题意

有 \(n+1\) 个点,其中的 \(n\) 个点在数轴上。求以点 \(k\) 为起点走过所有点的最短距离,允许重复。

思路

有两种情况:

  • \(k\) 在数轴上(如图1)。
  • \(k\) 在第 \(n+1\) 个点上(如图2)。

图1:

图2:

像第一种情况:

一定存在数轴上某点 \(k\) ,使得人先走遍 \(1\sim k\) ,回来,再走遍 \(k + 1\sim n\) ;

或点 \(k\) ,使得人先走遍 \(k + 1\sim n\) ,回来,再走遍 \(1\sim k\)

从点 \(p\) 出发,走一个区间 \(\left [ l,r \right ]\) 。

最短方案显然是从 \(p\) 到 \(l\) 或 \(r\) 中较近的一个,然后一路走到对面。 距离是\(dist (a_l ,a_r ) + \min(dist(p,a_l ),dist(p,a_r ))\) 。

从点 \(k\) 出发,走一个区间 \([l ,r]\) ,再回到 \(p\) 。最佳方案可以证明是从 \(k\) 走到 \(l\) 或 \(r\) 中的某一个,然后走到对面,然后走到 \(p\) 。距离是 \(|a_l-a_r| + \min(|a_k-a_l| +dist(r),| a_k-a_r | +dist(l))\) 。

AC Code

#include<bits/stdc++.h>
using namespace std;
int k,i,j,n;
double ans,x[100010],xp,yp,xk;
double C(int z) {
return hypot(a[z]-xp,yp);//hypot勾股定理
}
double A(int l,int r) {
return a[r]-a[l]+min(C(l),C(r));
}
double B(int l,int r) {
return a[r]-a[l]+min(abs(xk-a[l])+C(r),abs(xk-a[r])+C(l));
}
int main() {
cin>>n>>k;
for (i=1; i<=n; i++) cin>>a[i];
cin>>xp>>yp;
xk=a[k];
sort(a+1,a+n+1);
if (k<=n) {
ans=B(1,n);
for (i=2; i<=n; i++) {
double t=min(A(1,i-1)+B(i,n),A(i,n)+B(1,i-1));
if (t<ans) ans=t;
}
printf("%.20lf\n",ans);
} else printf("%.20lf\n",A(1,n));
return 0;
}

CF30D King's Problem? 题解的更多相关文章

  1. hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. hdu 3861 The King’s Problem trajan缩点+二分图匹配

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  3. HDU 3861.The King’s Problem 强联通分量+最小路径覆盖

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. HDU 3861 The King’s Problem(tarjan缩点+最小路径覆盖:sig-最大二分匹配数,经典题)

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  5. HDU 3861 The King’s Problem(强连通+二分图最小路径覆盖)

    HDU 3861 The King's Problem 题目链接 题意:给定一个有向图,求最少划分成几个部分满足以下条件 互相可达的点必须分到一个集合 一个对点(u, v)必须至少有u可达v或者v可达 ...

  6. hdu——3861 The King’s Problem

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  7. HDU 3861--The King’s Problem【scc缩点构图 &amp;&amp; 二分匹配求最小路径覆盖】

    The King's Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  8. POJ2826:An Easy Problem?!——题解(配特殊情况图)

    http://poj.org/problem?id=2826 题目大意:给两条线,让它接竖直下的雨,问其能装多少横截面积的雨. ———————————————————————————— 水题,看题目即 ...

  9. hdu 3861 The King’s Problem

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  10. HDU——T The King’s Problem

    http://acm.hdu.edu.cn/showproblem.php?pid=3861 Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

随机推荐

  1. wxPython==4.2.1 aui.AuiToolBar 如何去掉烦人的抓手?

    aui.AuiToolBar 如何去掉烦人的抓手? 最近在用wxPython做一些GUI小应用,发现工具栏总有几个点(抓手),很影响美观,如下: 目前官方没有提供隐藏抓手的功能,需要更改源码的auib ...

  2. Python OpenCV #1 - OpenCV介绍

    一.OpenCV介绍 1.1 OpenCV-Python教程简介 OpenCV由 Gary Bradsky 于1999年在英特尔创立,第一个版本于2000年发布. Vadim Pisarevsky 加 ...

  3. WPF+Emgucv实现在图像上画出感兴趣的区域 并进行掩膜获取 得到图像均值 和简单的 漫水填充

    <Grid.RowDefinitions></Grid.RowDefinitions> <Grid> <UniformGrid Columns="2 ...

  4. K8S POD控制器:从基础到高级实战技巧

    本文深入探讨了Kubernetes POD控制器的基础知识.配置示例.最佳实践,并通过一个电子商务公司的案例分析,展示了如何在复杂的生产环境中应用POD控制器,以优化云服务架构. 关注[TechLea ...

  5. Qt-qrencode开发-生成、显示二维码📀

    Qt-qrencode开发-生成二维码 目录 Qt-qrencode开发-生成二维码 1.概述 2.实现效果 3.编译qrencode 4.在QT中引入编译为静态库的QRencode 5.在Qt中直接 ...

  6. LLVM技术在GaussDB等数据库中的应用

    本文分享自华为云社区<[GaussTech第3期]LLVM技术在GaussDB等数据库中的应用>,作者:GaussDB 数据库. Hi,别急! 让技术触达每一个角落,赋能更多的人,Gaus ...

  7. numpy基础--通用函数:快速的元素级数组函数

    以下代码的前提:import numpy as np 通用函数(即ufunc)是一种对narray中的数组执行元素级运算的函数.可以看作简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化 ...

  8. php分组查询和聚合函数 数据显示的顺序

      // 分组查询和聚合函数         // 分组查询 : 将指定字段中的数据,按照不同的具体数值,进行分组         //           数据相同的分在一个分组中          ...

  9. 2024-06-08:用go语言,给定三个正整数 n、x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋。 在这座城市中,房屋通过街道相连。对于每个编号i(1 <= i < n), 存在一条

    2024-06-08:用go语言,给定三个正整数 n.x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋. 在这座城市中,房屋通过街道相连.对于每个编号i(1 <= i < n) ...

  10. Linux扩展篇-shell编程(五)-流程控制(四)-while语句

    基本语法: while [ condition ] do statement done 或 while [ condition ]; do statement done 注意事项: 实践: