2663: [Beijing wc2012]灵魂宝石

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 261  Solved: 108
[Submit][Status][Discuss]

Description

“作为你们本体的灵魂,为了能够更好的运用魔法,被赋予了既小巧又安全
的外形,„„” 
 
  我们知道,魔法少女的生命被存放于一个称为灵魂宝石(Soul Gem)的装置
内。而有时,当灵魂宝石与躯体的距离较远时,魔法少女就无法控制自己的躯体
了。 
   
  在传说中,魔法少女 Abel仅通过推理就得到了这个现象的一般法则,被称为
Abel定理:   
  存在宇宙常量 R(是一个非负实数,或正无穷) ,被称为灵魂宝石常量,量
纲为空间度量(即:长度) 。如果某个魔法少女的灵魂宝石与她的躯体的距离严
格超过 R,则她一定无法控制自己的躯体;如果这个距离严格小于 R,则她一定
可以控制自己的躯体。 (这里的距离指平面的 Euclid距离。) 
  注意:该定理不能预言距离刚好为 R 的情形。可能存在魔法少女 A 和 B,她
们离自己的灵魂宝石的距离都恰好为 R,但是 A可以控制自己的躯体,而 B 不可
以。 
   现在这个世界上再也没有魔法少女了,但是我们却对这个宇宙常量感兴趣。
我们只能通过之前的世界遗留下来的数据来确定这个常量的范围了。 
  每一组数据包含以下信息: 
    ·一共有N 个魔法少女及她们的灵魂宝石,分别编号为 1~N。 
    ·这 N个魔法少女所在的位置是(Xi, Yi)。 
    ·这 N个灵魂宝石所在的位置是(xi, yi)。 
    ·此时恰好有 K个魔法少女能够控制自己的躯体。 
  需要注意的是: 
1. 我们认为这个世界是二维的 Euclid 空间。 
    2. 魔法少女与灵魂宝石之间的对应关系是未知的。 
    3. 我们不知道是具体是哪 K个魔法少女能够控制自己的躯体。 
     
  根据以上信息,你需要确定灵魂宝石常量 R可能的最小值 Rmin 和最大值
Rmax。

Input

第一行包两个整数:N、K。 
接下来 N行,每行包含两个整数:Xi , Yi ,由空格隔开。 
再接下来N 行,每行包含两个整数:xi , yi ,由空格隔开。

Output

输出两个量:Rmin、Rmax,中间用空格隔开。 
Rmin 一定是一个非负实数,四舍五入到小数点后两位。 
Rmax 可能是非负实数,或者是正无穷: 
  如果是非负实数,四舍五入到小数点后两位; 
  如果是正无穷,输出“+INF”(不包含引号)。

Sample Input

2 1
1 0
4 0
0 0
4 4

Sample Output

1.00 5.00

HINT

对于100%的数据:

1 ≤  N  ≤  50,

0 ≤  K  ≤  N,

-1000 ≤  xi, yi , Xi , Yi  ≤  1000。

Source

 

[Submit][Status][Discuss]

二分答案+二分图最大匹配

二分一个答案,然后把小于等于这个距离的点对连边,做二分图最大匹配,这样可以找到最小值;

二分一个答案,然后把大于等于这个距离的点对连边,做二分图最大匹配,这样可以找到最大值。

 #include <cmath>
#include <cstdio>
#include <cstring> const int mxn = ; const double eps = 1E-; int n, m; struct point
{
double x, y; inline void read(void)
{
scanf("%lf%lf", &x, &y);
}
}A[mxn], B[mxn]; inline double sqr(double x)
{
return x * x;
} inline double dis(const point &a, const point &b)
{
return sqr(a.x - b.x) + sqr(a.y - b.y);
} int mat[mxn];
int vis[mxn]; bool G[mxn][mxn]; bool dfs(int u)
{
for (int i = ; i <= n; ++i)
if (G[u][i] && !vis[i])
{
vis[i] = true; if (!mat[i] || dfs(mat[i]))
return mat[i] = u, true;
} return false;
} inline int calc(void)
{
int ret = ; memset(mat, , sizeof mat); for (int i = ; i <= n; ++i)
if (memset(vis, , sizeof vis), dfs(i))++ret; return ret;
} namespace solve1
{
inline void build(double k)
{
memset(G, , sizeof G); for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j)
if (dis(A[i], B[j]) <= k)
G[i][j] = true;
} inline void main(void)
{
double lt = , rt = 1E7, mid, ans = 1E7; while (lt + eps <= rt)
{
mid = (lt + rt) / ; build(mid); if (calc() >= m)
rt = mid - eps, ans = mid;
else
lt = mid + eps;
} printf("%.2lf ", sqrt(ans));
}
} namespace solve2
{
inline void build(double k)
{
memset(G, , sizeof G); for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j)
if (dis(A[i], B[j]) >= k)
G[i][j] = true;
} inline void main(void)
{
if (n == m)
puts("+INF");
else
{
double lt = , rt = 1E7, mid, ans = 1E7; while (lt + eps <= rt)
{
mid = (lt + rt) / ; build(mid); if (calc() >= n - m)
lt = mid + eps, ans = mid;
else
rt = mid - eps;
} printf("%.2lf\n", sqrt(ans));
}
}
} signed main(void)
{
scanf("%d%d", &n, &m); for (int i = ; i <= n; ++i)
A[i].read(); for (int i = ; i <= n; ++i)
B[i].read(); solve1::main();
solve2::main();
}

@Author: YouSiki

BZOJ 2663: [Beijing wc2012]灵魂宝石的更多相关文章

  1. bzoj2663: [Beijing wc2012]灵魂宝石(二分+匈牙利)

    2663: [Beijing wc2012]灵魂宝石 题目:传送门 题解: 又是一道卡精度的题目. 很容易就可以看出单调性啊,如果R越大,选的人就越多,R越小,选的人就越少. 那最小值就直接搞咯. 那 ...

  2. BZOJ 2662: [BeiJing wc2012]冻结(最短路)

    这道题和 BZOJ 2763飞行路线 几乎一模一样..然后飞行路线我是1A,这道题WA了4次,我开始怀疑我的智商了.. ---------------------------------------- ...

  3. bzoj 2659: [Beijing wc2012]算不出的算式

    2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec  Memory Limit: 128 MB Description 算不出的算式背景:曾经有一个老掉牙的游 ...

  4. BZOJ 2661: [BeiJing wc2012]连连看 费用流

    2661: [BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭 ...

  5. Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路

    2662: [BeiJing wc2012]冻结 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 647  Solved: 348[Submit][Sta ...

  6. bzoj 2661: [BeiJing wc2012]连连看

    #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu ...

  7. BZOJ2663 [Beijing wc2012]灵魂宝石

    Description 平面中有\(n\)个黑点和\(n\)个白点.这些点组成\(n\)对,但是你不知道它们的对应关系.若某队中黑点白点距离\(<R\),则它是好的:\(>R\)则不是好的 ...

  8. bzoj 2660: [Beijing wc2012]最多的方案

                       Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 617  Solved: 361[Submit][Status][ ...

  9. [BZOJ] 2662: [BeiJing wc2012]冻结

    https://www.lydsy.com/JudgeOnline/problem.php?id=2662 第一次写分层图(捂脸) 一开始真的naive地建图了,T到飞起.. 可以省下建图的空间,直接 ...

随机推荐

  1. odoo之recoed.append()方法

    # 这里只是带数据到订单里面去,所以append要加append((0,0,)数据已经存在,放入到表中if dict: for line in dict: record.append((0,0,{'s ...

  2. OO——电梯作业总结

    目录 电梯作业总结 程序结构与复杂度的分析 第一次作业 第二次作业 第三次作业 程序BUG的分析 互测 自动评测 有效性 总结 电梯作业总结 程序结构与复杂度的分析 第一次作业 1.设计思路 第一次作 ...

  3. 20155302 Exp2 后门原理与实践

    20155302<网络对抗>后门原理与实践 实验要求 1.使用netcat获取主机操作Shell,cron启动 (0.5分) 2.使用socat获取主机操作Shell, 任务计划启动 (0 ...

  4. 20155339 Exp8 Web基础

    Exp8 Web基础 基础问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成部分: 表单标签,这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方 ...

  5. C# 获取汉字拼音首字母/全拼

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨C#获取汉字拼音首字母的方法: 代码类东西, ...

  6. Libgdx学习记录14——数据保存Preferences,XmlReader

    在游戏过程过程中,常常需要对某些数据进行保存,以确保下次运行时能够正确读取.如游戏中的金币.道具.游戏分数.已通过的关卡等. Libgdx中常用的数据保存方式有Preferences和XmlReade ...

  7. ECMAScript6——异步操作之Promise

    Promise对象的参数为一个回调函数,这个回调函数有两个参数,分别是resolve, reject(这俩参数的名字可任取),resolve,reject分别表示异步操作执行成功后的回调函数和异步操作 ...

  8. mybatis源码-解析配置文件(三)之配置文件Configuration解析

    目录 1. 简介 1.1 系列内容 1.2 适合对象 1.3 本文内容 2. 配置文件 2.1 mysql.properties 2.2 mybatis-config.xml 3. Configura ...

  9. Js_特效

    事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.srcE ...

  10. docker之故障问题解决方案

    1.报错如下一 Error response from daemon: driver failed programming external connectivity on endpoint lnmp ...