2663: [Beijing wc2012]灵魂宝石

题目:传送门


题解:

   又是一道卡精度的题目。

   很容易就可以看出单调性啊,如果R越大,选的人就越多,R越小,选的人就越少。

   那最小值就直接搞咯。

   那么对于最大值...n==k肯定就是无限大啦

   否则的话...有点恶心...太菜了

   我们换个角度想问题,因为要知道R的最大值,那么在只能选择k个人的情况下,我们只需要知道n-k个人的最大匹配的最小R值就好。

   那么反过来,原本是距离<R时建边,现在就改为距离>=R时再建边。。。

   精度1e-7...

  


代码:

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define eps 1e-7
using namespace std;
struct node
{
double x,y,next;
}a[];int len,last[];
void ins(int x,int y)
{
len++;a[len].x=x;a[len].y=y;
a[len].next=last[x];last[x]=len;
}
int match[],chw[],t;
bool findmuniu(int x)
{
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(chw[y]!=t)
{
chw[y]=t;
if(match[y]== || findmuniu(match[y]))
{
match[y]=x;
return true;
}
}
}
return false;
}
struct dian
{
double x,y;
}b[];
struct bs
{
double x,y;
}c[];
int n,k;
double dis(double x1,double y1,double x2,double y2){return sqrt(abs((x1-x2)*(x1-x2))+abs((y1-y2)*(y1-y2)));}
int check(double R,int opt)
{
int ans=;
len=;memset(last,,sizeof(last));
if(opt==)
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(dis(b[i].x,b[i].y,c[j].x,c[j].y)<R)
ins(i,j+n);
memset(match,,sizeof(match));
memset(chw,,sizeof(chw));t=;ans=;
for(int i=;i<=n;i++)
{
t++;
if(findmuniu(i))
ans++;
}
}
else
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(dis(b[i].x,b[i].y,c[j].x,c[j].y)>=R)
ins(i,j+n);
memset(match,,sizeof(match));
memset(chw,,sizeof(chw));t=;ans=;
for(int i=;i<=n;i++)
{
t++;
if(findmuniu(i))
ans++;
}
}
return ans;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%lf%lf",&b[i].x,&b[i].y);
for(int i=;i<=n;i++)scanf("%lf%lf",&c[i].x,&c[i].y);
double l=0.0,r=999999999.9,ans;
while(r-l>=eps)
{
double mid=(l+r)/2.0;
int tt=check(mid,);
if(tt==k)ans=mid;
if(tt>=k)r=mid-eps;
else l=mid+eps;
}
printf("%.2lf\n",ans);
if(n==k){printf("+INF\n");return ;}
l=0.0,r=999999999.9,ans=0.0;
while(r-l>=eps)
{
double mid=(l+r)/2.0;
int tt=check(mid,);
if(tt==n-k)ans=mid;
if(tt<n-k)r=mid-eps;
else l=mid+eps;
}
printf("%.2lf\n",ans);
return ;
}

bzoj2663: [Beijing wc2012]灵魂宝石(二分+匈牙利)的更多相关文章

  1. BZOJ2663 [Beijing wc2012]灵魂宝石

    Description 平面中有\(n\)个黑点和\(n\)个白点.这些点组成\(n\)对,但是你不知道它们的对应关系.若某队中黑点白点距离\(<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. Android新手入门2016(8)--ListView之ArrayAdapter

    本文来自肥宝传说之路,引用必须注明出处! ListView是Android中经常使用的控件. 什么是列表视图,让我们先看看图: watermark/2/text/aHR0cDovL2Jsb2cuY3N ...

  2. 在iOS中求数组元素中最大数与最小数

    之前求数组中某个数中的最大值与最小值.还真一个个比較,后来看到这种方法后,我就醉了 NSArray *testArray = [NSArray arrayWithObjects:@"-2.0 ...

  3. ES 内存使用和GC指标——主节点每30秒会去检查其他节点的状态,如果任何节点的垃圾回收时间超过30秒(Garbage collection duration),则会导致主节点任务该节点脱离集群。

    摘录自:http://blog.csdn.net/yangwenbo214/article/details/74000458 内存使用和GC指标 在运行Elasticsearch时,内存是您要密切监控 ...

  4. 一个操作oracle的c#类 含分页

    有别于以前的一个OracleHelper,这个版各有所长,MARK下. using System; using System.Data; using System.Data.OracleClient; ...

  5. excel如何将一列按奇偶数分成两列

    借助于函数.上图说明一切: 方法一.OFFSET函数, 奇数列公式:C1=OFFSET($A$1,ROW()*2-2,), 偶数列公式:D1=OFFSET($A$1,ROW()*2-1,) 一起下拉即 ...

  6. [IOI 1999] 花店橱窗布置

    [题目链接] https://www.luogu.org/problemnew/show/P1854v [算法] f[i][j]表示放了前i束花,第i束花放在第j个花瓶中,所能获得的最大美学值 由于要 ...

  7. P1888 三角函数

    题目描述 输入一组勾股数a,b,c(a≠b≠c),用分数格式输出其较小锐角的正弦值.(要求约分.) 输入输出格式 输入格式: 一行,包含三个数,即勾股数a,b,c(无大小顺序). 输出格式: 一行,包 ...

  8. appium连接夜游神的方法

    很多小伙伴想连接夜游神模拟器,但是无法连接,下面是夜游神的链接方法 第一步:先打开夜游神模拟器 第二步:打开运行输入cmd,输入夜游神连接方法:adb connect 127.0.0.1:62001第 ...

  9. Sqlite简单操作

    1.student类 public class Student { int id; String name; String sex; String address; int money; public ...

  10. 解决从Excel导入数据库,导入到DataTable时数据类型发生变化的问题(如数字类型变成科学计数法,百分数变成小数)

    做项目的时候,C#读取Excel数据到DataTable或者DataSet,设断点查看DataTable,发现Excel的显示为较长位数数字的字段如0.000012在DataTable中显示为科学计数 ...