It was recycling day in Kekoland. To celebrate it Adil and Bera went to Central Perk where they can take bottles from the ground and put them into a recycling bin.

We can think Central Perk as coordinate plane. There are n bottles on the ground, the i-th bottle is located at position (xi, yi). Both Adil and Bera can carry only one bottle at once each.

For both Adil and Bera the process looks as follows:

  1. Choose to stop or to continue to collect bottles.
  2. If the choice was to continue then choose some bottle and walk towards it.
  3. Pick this bottle and walk to the recycling bin.
  4. Go to step 1.

Adil and Bera may move independently. They are allowed to pick bottles simultaneously, all bottles may be picked by any of the two, it's allowed that one of them stays still while the other one continues to pick bottles.

They want to organize the process such that the total distance they walk (the sum of distance walked by Adil and distance walked by Bera) is minimum possible. Of course, at the end all bottles should lie in the recycling bin.

Input

First line of the input contains six integers ax, ay, bx, by, tx and ty (0 ≤ ax, ay, bx, by, tx, ty ≤ 109) — initial positions of Adil, Bera and recycling bin respectively.

The second line contains a single integer n (1 ≤ n ≤ 100 000) — the number of bottles on the ground.

Then follow n lines, each of them contains two integers xi and yi (0 ≤ xi, yi ≤ 109) — position of the i-th bottle.

It's guaranteed that positions of Adil, Bera, recycling bin and all bottles are distinct.

Output

Print one real number — the minimum possible total distance Adil and Bera need to walk in order to put all bottles into recycling bin. Your answer will be considered correct if its absolute or relative error does not exceed 10 - 6.

Namely: let's assume that your answer is a, and the answer of the jury is b. The checker program will consider your answer correct if .

Examples
Input

Copy
3 1 1 2 0 0
3
1 1
2 1
2 3
Output

Copy
11.084259940083
Input

Copy
5 0 4 2 2 0
5
5 2
3 0
5 5
3 5
3 3
Output

Copy
33.121375178000
Note

Consider the first sample.

Adil will use the following path: .

Bera will use the following path: .

Adil's path will be units long, while Bera's path will be units long.

题意:

两个人捡瓶子,分别从原位置出发,捡到一个后返回垃圾箱处放垃圾,两人独立;

问最后距离之和的 min;

令最开始的距离为 sum = ∑2*dist [ i ];

两人可以同时到一个点,那么距离就是 sum - dist [ i ] + disa [ i ] + disb [ i ]-dist [ i ];

当然也可以一个人去,那么就是 sum - dist [ i ] + ( disa [ i ] || disb[ i ] );

每次维护一个最小值即可;

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<bitset>
#include<ctime>
#include<deque>
#include<stack>
#include<functional>
#include<sstream>
//#include<cctype>
//#pragma GCC optimize("O3")
using namespace std;
#define maxn 200005
#define inf 0x3f3f3f3f
#define INF 9999999999
#define rdint(x) scanf("%d",&x)
#define rdllt(x) scanf("%lld",&x)
#define rdult(x) scanf("%lu",&x)
#define rdlf(x) scanf("%lf",&x)
#define rdstr(x) scanf("%s",x)
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int U;
#define ms(x) memset((x),0,sizeof(x))
const long long int mod = 1e9 + 7;
#define Mod 1000000000
#define sq(x) (x)*(x)
#define eps 1e-3
typedef pair<int, int> pii;
#define pi acos(-1.0)
const int N = 1005;
#define REP(i,n) for(int i=0;i<(n);i++)
typedef pair<int, int> pii;
inline ll rd() {
ll x = 0;
char c = getchar();
bool f = false;
while (!isdigit(c)) {
if (c == '-') f = true;
c = getchar();
}
while (isdigit(c)) {
x = (x << 1) + (x << 3) + (c ^ 48);
c = getchar();
}
return f ? -x : x;
} ll gcd(ll a, ll b) {
return b == 0 ? a : gcd(b, a%b);
}
ll sqr(ll x) { return x * x; } /*ll ans;
ll exgcd(ll a, ll b, ll &x, ll &y) {
if (!b) {
x = 1; y = 0; return a;
}
ans = exgcd(b, a%b, x, y);
ll t = x; x = y; y = t - a / b * y;
return ans;
}
*/ ll qpow(ll a, ll b, ll c) {
ll ans = 1;
a = a % c;
while (b) {
if (b % 2)ans = ans * a%c;
b /= 2; a = a * a%c;
}
return ans;
} double ax, ay, bx, by, tx, ty;
struct node {
double x, y;
}indx[maxn]; double dis(double a, double b, double x, double y) {
return sqrt(1.0*(a - x)*(a - x) + 1.0*(b - y)*(b - y))*1.0;
} double dist[maxn], disa[maxn], disb[maxn]; int main()
{
//ios::sync_with_stdio(0);
rdlf(ax); rdlf(ay); rdlf(bx); rdlf(by); rdlf(tx); rdlf(ty);
int n; rdint(n);
double ans = 0.0;
for (int i = 1; i <= n; i++) {
rdlf(indx[i].x), rdlf(indx[i].y);
dist[i] = 1.0*dis(indx[i].x, indx[i].y, tx, ty);
disa[i] = 1.0*dis(ax, ay, indx[i].x, indx[i].y);
disb[i] = 1.0*dis(bx, by, indx[i].x, indx[i].y);
ans += 2.0*dist[i];
}
double Max = INF * 1.0;
double Maxx = INF * 1.0;
int posa, posb; for (int i = 1; i <= n; i++) {
if (Max > disa[i] - dist[i]) {
Max =1.0* disa[i] - 1.0*dist[i]; posa = i;
}
if (Maxx > disb[i] - dist[i]) {
Maxx = 1.0*disb[i] - 1.0*dist[i]; posb = i;
}
}
// cout << posa << ' ' << posb << endl;
double sum = ans;
if (Maxx < 0 && Max < 0) {
if (posa != posb) {
sum = ans + Maxx * 1.0 + Max * 1.0;
}
else {
for (int i = 0; i <= n; i++) {
if (i != posa) {
sum = min(sum, ans - dist[posa] + disa[posa] - dist[i] + disb[i]);
}
}
for (int i = 0; i <= n; i++) {
if (i != posb) {
sum = min(sum, ans - dist[posb] + disb[posb] - dist[i] + disa[i]);
}
}
}
}
else {
if (Max < Maxx) {
sum = ans + disa[posa] - dist[posa];
}
else {
sum = ans + disb[posb] - dist[posb];
}
}
printf("%.9lf\n", 1.0*sum);
return 0;
}

CF671A Recycling Bottles 计算几何的更多相关文章

  1. codeforces 672C C. Recycling Bottles(计算几何)

    题目链接: C. Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  2. CF 672C Recycling Bottles[最优次优 贪心]

    C. Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  3. Codeforces Round #352 (Div. 2) C. Recycling Bottles 贪心

    C. Recycling Bottles   It was recycling day in Kekoland. To celebrate it Adil and Bera went to Centr ...

  4. codeforces 352 div 2 C.Recycling Bottles 贪心

    C. Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  5. Codeforces Recycling Bottles 模拟

    C. Recycling Bottles time limit per test: 2 seconds memory limit per test: 256 megabytes input: stan ...

  6. Codeforces Round #352 (Div. 1) A. Recycling Bottles 暴力

    A. Recycling Bottles 题目连接: http://www.codeforces.com/contest/671/problem/A Description It was recycl ...

  7. Codeforces 671 A——Recycling Bottles——————【思维题】

     Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. Codeforces Round #352 (Div. 2) C. Recycling Bottles

      C. Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  9. 【18.69%】【codeforces 672C】Recycling Bottles

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

随机推荐

  1. The Commercial Open-Source Monitoring Landscape

    As enterprises have adopted open-source monitoring tools, there is growing market demand by enterpri ...

  2. 使用jmx4perl和j4psh接管Jolokia

    在ActiveMQ的API中,内置了Jolokia . 可以使用jmx4perl来安装: $ perl -MCPAN -e shell Terminal does not support AddHis ...

  3. 简单的windows作业管理(自己也没弄透彻)

    先把代码贴出来,以后有时间再研究!简单的说,作业就相当于沙箱,可以使程序在一定范围内活动. #include "stdafx.h"#include "windows.h& ...

  4. SQLServer数据库中开启CDC导致事务日志空间被占满的原因

    SQLServer数据库中开启CDC导致事务日志空间被占满的原因 转载  2017-04-01   投稿:mrr    我要评论 这篇文章主要介绍了SQLServer数据库中开启CDC导致事务日志空间 ...

  5. DAY16-Django之MTV

    MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻辑,并在适当的时候 ...

  6. java如何从cmd运行并使用text文件作为输入源的总结

    大家好,好几天没写东西了,又和大家见面了 首先,编译我们的.java文件,生成.class文件 使用命令 javac yourname.java 编译 然后使用java youname < yo ...

  7. powerdesigner自动将name填充到注释的脚本

    我在建模的时候,希望在生成脚本的时候有注释,所以才会看到Comment列,实际上,只要你的表中的Name列不为空,运行下面的VBScript,PD会帮你自动填充注释的Comment列值. '把pd中那 ...

  8. Codeforces 1137C Museums Tour (强连通分量, DP)

    题意和思路看这篇博客就行了:https://www.cnblogs.com/cjyyb/p/10507937.html 有个问题需要注意:对于每个scc,只需要考虑进入这个scc的时间即可,其实和从哪 ...

  9. Excel VBA 若要在64位系统上使用,则必须更新此项目中的代码,请检查并更新Declare语句,然后用PtrSafe属性标记它们

    在Office 2010 32位上开发的Excel VBA系统,迁移到Office 2010 64位下面,打开后使用,报下面错误: 解决办法:  在Declare 后面加PtrSafe 进行标记

  10. setjmp和longjmp

    此文是学习 C专家编程 中的笔记. setjmp和longjmp是C语言所独有的,它们部分弥补了C语言有限的转移能力. 函数说明(来自wiki百科): int setjmp(jmp_buf env) ...