BZOJ 2663: [Beijing wc2012]灵魂宝石
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
1 0
4 0
0 0
4 4
Sample Output
HINT
对于100%的数据:
1 ≤ N ≤ 50,
0 ≤ K ≤ N,
-1000 ≤ xi, yi , Xi , Yi ≤ 1000。
Source
二分答案+二分图最大匹配
二分一个答案,然后把小于等于这个距离的点对连边,做二分图最大匹配,这样可以找到最小值;
二分一个答案,然后把大于等于这个距离的点对连边,做二分图最大匹配,这样可以找到最大值。
#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]灵魂宝石的更多相关文章
- bzoj2663: [Beijing wc2012]灵魂宝石(二分+匈牙利)
2663: [Beijing wc2012]灵魂宝石 题目:传送门 题解: 又是一道卡精度的题目. 很容易就可以看出单调性啊,如果R越大,选的人就越多,R越小,选的人就越少. 那最小值就直接搞咯. 那 ...
- BZOJ 2662: [BeiJing wc2012]冻结(最短路)
这道题和 BZOJ 2763飞行路线 几乎一模一样..然后飞行路线我是1A,这道题WA了4次,我开始怀疑我的智商了.. ---------------------------------------- ...
- bzoj 2659: [Beijing wc2012]算不出的算式
2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec Memory Limit: 128 MB Description 算不出的算式背景:曾经有一个老掉牙的游 ...
- BZOJ 2661: [BeiJing wc2012]连连看 费用流
2661: [BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭 ...
- Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路
2662: [BeiJing wc2012]冻结 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 647 Solved: 348[Submit][Sta ...
- bzoj 2661: [BeiJing wc2012]连连看
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu ...
- BZOJ2663 [Beijing wc2012]灵魂宝石
Description 平面中有\(n\)个黑点和\(n\)个白点.这些点组成\(n\)对,但是你不知道它们的对应关系.若某队中黑点白点距离\(<R\),则它是好的:\(>R\)则不是好的 ...
- bzoj 2660: [Beijing wc2012]最多的方案
Time Limit: 5 Sec Memory Limit: 128 MB Submit: 617 Solved: 361[Submit][Status][ ...
- [BZOJ] 2662: [BeiJing wc2012]冻结
https://www.lydsy.com/JudgeOnline/problem.php?id=2662 第一次写分层图(捂脸) 一开始真的naive地建图了,T到飞起.. 可以省下建图的空间,直接 ...
随机推荐
- 实现MD5的加密和解密
加密代码 public static string Encrypt(string Text, string sKey) { DESCryptoServiceProvider des = new DES ...
- test zhenai
web.Document.InvokeScript("eval",new string[]{"document.getElementById('passwordbt'). ...
- 20155325 Exp9 Web安全基础
本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何防御 原理:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击 ...
- 阿里云Redis外网转发访问
1.前提条件 如果您需要从本地 PC 端访问 Redis 实例进行数据操作,可以通过在 ECS 上配置端口映射或者端口转发实现.但必须符合以下前提条件: 若 Redis 实例属于专有网络(VPC),E ...
- eclipse 最最最常用快捷键
使用eclipse这么久,发现其跟PS一样,使用一些快捷键会有效率很多. 至此总结出以下每次打开eclipse基本都会用上的快捷键. 不熟悉这些快捷键,在实际编程中有意识使用的话对以后编码很有帮助. ...
- Wannafly挑战赛26-F-msc的棋盘[最小割转化dp]
题意 一个大小为 \(n*m\) 的棋盘,知道每一列放了多少棋子,求有多少摆放方案满足要求. \(n,m\leq 50\) . 分析 如果是求是否有方案的话可以考虑网络流,行列连边,列容量为 \(b_ ...
- centos7 部署LNMP
1.安装Nginx 使用Nginx官方提供的rpm包 [root@nginx ~]# cat /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo b ...
- EVA索赔系统JAVA拦截例外站点
控制面板->JAVA->JAVA控制面板->安全->添加以下例外站点: https://aftersales.i.daimler.com https://swdist.afte ...
- 机器视觉及图像处理系列之二(C++,VS2015)——图像级的人脸识别(1)
接上一篇,一切顺利的话,你从github上clone下来的整个工程应该已经成功编译并生成dll和exe文件了:同时,ImageMagic程序亦能够打开并编辑图像了,如此,证明接下来的操练你不会有任何障 ...
- 华为笔试——C++字符串四则运算的实现
题目:字符串四则运算的实现 有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值.四则运算即:加减乘除"+-*/",另外该表达式中的数字只能是1位(数值范围0~9),运算 ...