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到飞起.. 可以省下建图的空间,直接 ...
随机推荐
- hiveserver2连接报错: User: root is not allowed to impersonate anonymous (state=08S01,code=0)
使用HiveServer2运行时,启动好HiveServer后运行 private static String url = "jdbc:hive2://192.168.213.132:100 ...
- Exp5:MSF基础应用
Exp5:MSF基础应用 一.基础问题回答 (1)用自己的话解释什么是 exploit , payload , encode. exploit: 设相当于利用漏洞偷偷打开的管道,将做好的木马病毒等顺利 ...
- 20155339 Exp8 Web基础
Exp8 Web基础 基础问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成部分: 表单标签,这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方 ...
- 《图说VR入门》——360全景视频
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53674647 作者:car ...
- [CTSC2006]歌唱王国
[CTSC2006]歌唱王国 Tags:题解 题意 链接:在空串后不断随机添加字符,直到出现串\(S_i\)为止.求最终串的期望长度.\(\sum |S_i|\le 5*10^6\) 题解 以下内容来 ...
- OLEDB 命令转换组件的用法
在数据流任务组件中,OLEDB 命令转换组件对输入的每行数据调用TSQL,该组件能够把输入的数据作为参数,因此,该转换组件主要用于运行参数化的查询. 命令转换组件的配置十分简单,只有三个可编辑属性,位 ...
- vue-router单页应用简单示例(一)
请先完成了项目初始化,具体请看我另一篇博文.vue项目初始化 看一下完成的效果图,很典型的单页应用. .vue后缀名的单文件组件 这里先说一下我对组件的理解.组件,顾名思义就是一组元素组成的一个原 ...
- Windows Defender还原误删文件
Win 10 新版本的Windows Defender隔离/删除的文件没有还原的选项,导致被误删的文件无法在威胁记录中恢复.经过尝试发现可以通过修改注册表添加 “还原” 选项 打开注册表,找到 HKE ...
- mybati缓存机制之一级缓存
在月黑风高的某天夜晚,boss chen语重心长的发条了消息给小草说:“小草啊,是时候写写博客来记录平常自己积累的东西了......”.小草一听,平常没有写博客的习惯,在平常开发中只是用笔记记录自 ...
- 详细聊聊k8s deployment的滚动更新(二)
一.知识准备 ● 本文详细探索deployment在滚动更新时候的行为 ● 相关的参数介绍: livenessProbe:存活性探测.判断pod是否已经停止 readinessProbe:就绪 ...