CF30D King's Problem? 题解
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? 题解的更多相关文章
- hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 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 ...
- HDU 3861.The King’s Problem 强联通分量+最小路径覆盖
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 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 ...
- HDU 3861 The King’s Problem(强连通+二分图最小路径覆盖)
HDU 3861 The King's Problem 题目链接 题意:给定一个有向图,求最少划分成几个部分满足以下条件 互相可达的点必须分到一个集合 一个对点(u, v)必须至少有u可达v或者v可达 ...
- hdu——3861 The King’s Problem
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 3861--The King’s Problem【scc缩点构图 && 二分匹配求最小路径覆盖】
The King's Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- POJ2826:An Easy Problem?!——题解(配特殊情况图)
http://poj.org/problem?id=2826 题目大意:给两条线,让它接竖直下的雨,问其能装多少横截面积的雨. ———————————————————————————— 水题,看题目即 ...
- hdu 3861 The King’s Problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- HDU——T The King’s Problem
http://acm.hdu.edu.cn/showproblem.php?pid=3861 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
随机推荐
- 解决 idea web项目没有小蓝点的问题
在idea导入web项目,项目没有显示小蓝点,无法添加 java文件和运行.如下图的springboot-schedule 和 springboot-test 都没有蓝点: 解决方案一: 点击 Fil ...
- 纯css+html做emoji动态表情
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- php分组查询和聚合函数 数据显示的顺序
// 分组查询和聚合函数 // 分组查询 : 将指定字段中的数据,按照不同的具体数值,进行分组 // 数据相同的分在一个分组中 ...
- kettle从入门到精通 第二十一课 kettle Carte服务器
1.相关配置文件 jdbc.properties保存在simple-jndi目录下,这个文件用来存储JNDI连接对象的连接参数.Kettle可以用JNDI的方式来引用JDBC连接参数,如IP地址.用户 ...
- linux查看redis安装路径
## linux查看redis安装路径 redis-cli -h 127.0.0.1 -p 6379redis-cli monitor > redis2.log /usr/local/redis ...
- 盘点 Spring Boot 解决跨域请求的几种办法
熟悉 web 系统开发的同学,对下面这样的错误应该不会太陌生. 之所以会出现这个错误,是因为浏览器出于安全的考虑,采用同源策略的控制,防止当前站点恶意攻击 web 服务器盗取数据. 01.什么是跨域请 ...
- 实验5.OSPF配置实验
# 实验5.OSPF配置实验 配置ospf使全网联通 实验组 拓扑,路由器选择为AR2220,交换机为S5700 联通配置 给每台路由器的对应端口配置相应的ip,并启动ospf协议,可以看到此时5台设 ...
- 基于MCU的SD卡fat文件系统读写移植
背景 https://blog.csdn.net/huang20083200056/article/details/78508490 SD卡(Secure Digital Memory Card)具有 ...
- k8s学习总结之各组件功能及作用的详细介绍
K8S集群架构: 一个K8S集群是由两大部分组成: Master节点和Node节点 一.Master节点主要包括API Server.Scheduler.Controller manager.etcd ...
- 随机森林R语言预测工具
随机森林(Random Forest)是一种基于决策树的集成学习方法,它通过构建多个决策树并集成它们的预测结果来提高预测的准确性.在R语言中,我们可以使用randomForest包来构建和训练随机森林 ...