Description

平面中有\(n\)个黑点和\(n\)个白点。这些点组成\(n\)对,但是你不知道它们的对应关系。若某队中黑点白点距离\(<R\),则它是好的;\(>R\)则不是好的;\(=R\)的时候可好可不好。已知有\(k\)对是好的,求\(R\)的最大值和最小值。

Solution

首先解决对称的问题:给定\(R\),求\(k\)的最大值和最小值。

求\(k\)的最大值可以二分图匹配:所有\(\leqslant R\)的可以构成一对。

求最小值同样可以二分图匹配:所有\(\geqslant R\)的可以构成一对(不好的一对);令不好的尽量多即可。

可以发现当\(R\)增大时\(k_{max}\)和\(k_{min}\)都是不减的。所以二分\(R\)即可。

Code

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
const int N = 55;
int X[N], Y[N], x[N], y[N];
int n, K, R;
inline int sqr(int x) { return x * x; }
bool check(int i, int j, bool max) {
int l = sqr(X[i] - x[j]) + sqr(Y[i] - y[j]);
return max ? l >= R : l <= R;
}
int my[N];
bool vis[N];
bool dfs(int x, bool max) {
for (int y = 1; y <= n; ++y) if (!vis[y]) {
bool l = check(x, y, max);
if (!l) continue;
vis[y] = true;
if (!my[y] || dfs(my[y], max)) {
my[y] = x;
return true;
}
}
return false;
}
bool check(int mid, bool max) {
R = mid;
memset(my, 0, sizeof my);
int ans = 0;
for (int x = 1; x <= n; ++x) {
memset(vis, 0, sizeof vis);
if (dfs(x, max)) ++ans;
}
return max ? n - ans <= K : ans >= K;
}
int main() {
scanf("%d%d", &n, &K);
for (int i = 1; i <= n; ++i) scanf("%d%d", &X[i], &Y[i]);
for (int i = 1; i <= n; ++i) scanf("%d%d", &x[i], &y[i]);
int l = 0, r = 10000000;
while (l < r) {
int mid = (l + r) / 2;
if (check(mid, false)) r = mid;
else l = mid + 1;
}
printf("%.2lf ", sqrt(l));
if (K == n) { puts("+INF"); return 0; }
l = 0, r = 10000000;
while (l < r) {
int mid = r + (l - r) / 2;
if (check(mid, true)) l = mid;
else r = mid - 1;
}
printf("%.2lf\n", sqrt(l));
return 0;
}

BZOJ2663 [Beijing wc2012]灵魂宝石的更多相关文章

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

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

  2. BZOJ 2663: [Beijing wc2012]灵魂宝石

    2663: [Beijing wc2012]灵魂宝石 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 261  Solved: 108[Submit][S ...

  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. BZOJ2661: [BeiJing wc2012]连连看

    2661: [BeiJing wc2012]连连看 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 483  Solved: 200[Submit][S ...

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

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

  7. BZOJ2659: [Beijing wc2012]算不出的算式

    2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 668  Solved: 366[Submit] ...

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

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

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

    2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 757  Solved: 425[Submit] ...

随机推荐

  1. 转载:在spring中嵌入activemq

    转载:http://www.dev26.com/blog/article/137 web开发站中的邮件发送使用了activemq我这是从网上找的进行了一些修改,记录下来,为了避免发送邮件时程序对用户操 ...

  2. webpack快速入门——实战技巧:开发和生产并行设置

    package.json中,devDependencies和dependencies是不同的 devDependencies:开发依赖 dependencies:生产依赖(线上) 1.安装生产环境的依 ...

  3. Android之系统架构

    Android 是Google开发的基于Linux平台的开源手机操作系统.它包括操作系统.用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍.Andr ...

  4. 消息中间件(一)MQ详解及四大MQ比较

    一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.当今市面上有很多主流 ...

  5. 对Spring 及SpringMVC的理解

    spring是一个轻型容器(light-weight Container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model).在此基础之上,Spring提供了AO ...

  6. java解压缩.gz .zip .tar.gz等格式的压缩包方法总结

    1..gz文件是linux下常见的压缩格式.使用 java.util.zip.GZIPInputStream即可,压缩是 java.util.zip.GZIPOutputStream public s ...

  7. 移动端 实现ul横向滚动条

    ul { display: flex; width: 100%; height: 3.333333rem; background: #fff; padding: 0.373333rem 0.32rem ...

  8. 【bzoj4503】 两个串 FFT

    $FFT$套路题(然而我看错题了) 我们考虑化一下式子. 设当前比较的两个部分为$S[i....i+|T|-1]$和$T[0....|T|-1]$. 我们对串$T$中出现问号的位置全部赋值为$0$. ...

  9. POJ 2346

    #include<iostream> #include<stdio.h> using namespace std; ,,,,}; int main() { int num; c ...

  10. 给easyui datebox时间框控件扩展一个清空的实例

    给easyui datebox扩展一个清空的实例 步骤一:拓展插件 /** * 给时间框控件扩展一个清除的按钮 */ $.fn.datebox.defaults.cleanText = '清空'; ( ...