[Codeforces 30D] Kings Problem
Brief Intro:
有n+1个点,其中n个点在X轴上,求从第k个点出发最短的汉密尔顿路径
Solution:
分类讨论+逐个枚举
设dist(i)是第i个点到n+1的距离
cal1(l,r)是n+1到dat[l]~dat[r]的最短距离
cal2(l,r)是dat[k]到dat[l]~dat[r]再到n+1的最短距离
1、如果k=n+1,则答案明显是线段长+min(dist(1),dist(n))
2、否则要逐个枚举
可以发现共有2种可能:n+1连到线段的边有1条/2条
如为1条,则结果为cal1(1,n);
如为2条,则可将路径分为dat[k]到dat[l]~dat[r]再到n+1 + n+1到剩余的点
明显剩余的点连续时有最优解
于是res[i]=min( cal1(1,i-1)+cal2(i,n) , cal2(1,i-1)+cal1(i,n) )。
Code:
#include <bits/stdc++.h> using namespace std; const int MAXN=1e5+;
double dat[MAXN],x,y,kx;
int n,k; double dist(int pos){return hypot(x-dat[pos],y);} double cal1(int l,int r)
{
return dat[r]-dat[l]+min(dist(l),dist(r));
} double cal2(int l,int r)
{
return dat[r]-dat[l]+min(dist(l)+fabs(kx-dat[r]),dist(r)+fabs(kx-dat[l]));
} int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++) scanf("%lf",&dat[i]);
scanf("%lf%lf",&x,&y); kx=dat[k];sort(dat+,dat+n+); double res;
if(k==n+) res=cal1(,n);
else
{
res=cal2(,n);
for(int i=;i<=n;i++)
res=min(res,min(cal1(,i-)+cal2(i,n),cal2(,i-)+cal1(i,n)));
}
printf("%.10f",res);
return ;
}
[Codeforces 30D] Kings Problem的更多相关文章
- codeforces 340C Tourist Problem
link:http://codeforces.com/problemset/problem/340/C 开始一点也没思路,赛后看别人写的代码那么短,可是不知道怎么推出来的啊! 后来明白了. 首先考虑第 ...
- codeforces B. Routine Problem 解题报告
题目链接:http://codeforces.com/problemset/problem/337/B 看到这个题目,觉得特别有意思,因为有熟悉的图片(看过的一部电影).接着让我很意外的是,在纸上比划 ...
- Codeforces 527D Clique Problem
http://codeforces.com/problemset/problem/527/D 题意:给出一些点的xi和wi,当|xi−xj|≥wi+wj的时候,两点间存在一条边,找出一个最大的集合,集 ...
- Codeforces 706C - Hard problem - [DP]
题目链接:https://codeforces.com/problemset/problem/706/C 题意: 给出 $n$ 个字符串,对于第 $i$ 个字符串,你可以选择花费 $c_i$ 来将它整 ...
- Codeforces 1096D - Easy Problem - [DP]
题目链接:http://codeforces.com/problemset/problem/1096/D 题意: 给出一个小写字母组成的字符串,如果该字符串的某个子序列为 $hard$,就代表这个字符 ...
- Codeforces 793C - Mice problem(几何)
题目链接:http://codeforces.com/problemset/problem/793/C 题目大意:给你一个捕鼠器坐标,和各个老鼠的的坐标以及相应坐标的移动速度,问你是否存在一个时间点可 ...
- CodeForces 687A NP-Hard Problem
Portal:http://codeforces.com/problemset/problem/687/A 二分图染色 好模板题 有SPJ 值得注意的是,因为C++的奇妙的运算机制 若在vector变 ...
- Codeforces Gym 100342J Problem J. Triatrip 求三元环的数量 bitset
Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...
- Codeforces Gym 100342C Problem C. Painting Cottages 转化题意
Problem C. Painting CottagesTime Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10 ...
随机推荐
- 【BZOI 1202 狡猾的商人】
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4149 Solved: 1994[Submit][Status][Discuss] Descript ...
- [codeforces gym Matrix God]随机矩阵乘法
题目链接:http://codeforces.com/gym/101341/problem/I 随机真是一个神奇的方法.原本矩阵乘法是n^3的复杂度,但是这个题是让判断两个矩阵是否相等,只需要在两个矩 ...
- Vue项目中引入外部文件(css、js、less)
例子中css文件采用bootstrap.css,js文件采用jQuery,less文件用less.less(自定义文件) 步骤一:安装webpack cnpm install webpack -g 步 ...
- 图论:2-SAT
先象征性地描述一下问题:一组(或者一个)东西有且仅有两种选择,要么选这个,要么选那个,还有一堆的约束条件 图论问题,当然是建边跑图喽 给出模型: 模型一:两者(A,B)不能同时取 那么选择了A就只能选 ...
- JGroups 初探
最近研究 JAVA 集群技术,看到 jgroups 这个框架,网上有些例子,非常简单.可以参考其官方网址:http://www.jgroups.org/manual/index.html按捺不住,自己 ...
- NPOI的使用Excel模板导出 可插入到指定行
Excel模版建议把需要添加数据行的样式设置好 模版样式,导出后效果 [2017-11-22 对获取需插入数据的首行样式有时为空报错修改] /// <summary> /// 根据模版导出 ...
- equestAnimationFrame
export const requestAnimationFrame = (() => { /* istanbul ignore next */ if (!inBrowser) { return ...
- HoneyPy 模拟Nginx服务器脚本
HoneyPy是一个Python写的低交互式蜜罐,可以通过自定义Plugins的方式来配置不同的场景.这里是一个模拟Nginx空白页面的代码: # Auth xiaoxiaoleo # http:// ...
- python基础代码(猜年龄、从最内层跳出多层循环、简单的购物车程序)
1.猜年龄 , 可以让用户最多猜三次! age = 55 i=0 while i<3: user_guess = int (input ("input your guess:" ...
- HDU3910(数学期望题,题目难懂)
Liang Guo Sha Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...