参考博客

紫薯P230

题意:给出平面上n个白点n个黑点,要求两两配对,且配对所连线段没有交点。

紫薯思路:找出y坐标最小的点,如果多个,考虑x最小的。将其他点相对于这个点按极角从小到大排序,然后开始扫描,当白点和黑点一样多时(算上最下面的点),第一个和最后一个匹配,然后递归匹配中间的和外边这两部分

 #include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <cstdio>
using namespace std;
const int N = + ;
int n;
struct Point
{
int x, y;
Point() {}
Point(int x, int y) : x(x), y(y) {}
double angle(const Point& p) const // 求极角
{
return atan2(y - p.y, x - p.x);
}
bool operator< (const Point& p) const // 定义 <
{
return y < p.y || (y == p.y && x < p.x);
}
void read() // 读入坐标
{
scanf("%d%d", &x, &y);
}
};
struct Node
{
Point p; // 每一个点包含x,y坐标
int id;
double ang; // 与标准点的极角
bool operator< (const Node& node) const // 定义Node的<,按极角从小到大排序
{
return ang < node.ang;
}
void getAngle(const Node& node)
{
ang = p.angle(node.p);
}
int type() // 如果是黑点(白点) 返回1,否则返回-1,判断黑点和白点数量相等时使用
{
return id <= n ? : -;
}
}p[N * ];
int ans[N * ]; // 配对表
void solve(int l, int r)
{
if (l > r)
return;
int pos = l;
for (int i = l + ; i <= r; i++)
{
if (p[i].p < p[pos].p)
pos = i;
}
swap(p[l], p[pos]); // 让怕p[l]成为最下面的点,y最小
int cnt = p[l].type();
for (int i = l + ; i <= r; i++) // 求出所有点与标准的极角大小
{
p[i].getAngle(p[l]);
}
sort(p + l + , p + r + ); // 按极角从小到大排序
for (int i = l + ; i <= r; i++)
{
cnt += p[i].type();
if (!cnt) // 黑点和白点相等时 cnt == 0
{
ans[ p[i].id ] = p[l].id; // 此时的第一个 和 最后一个配对
ans[ p[l].id ] = p[i].id;
solve(l + , i - ); // 解决内部的
solve(i + , r); // 解决外部的
return;
}
}
}
int main()
{
while (scanf("%d", &n) != EOF)
{
for (int i = ; i <= (n << ); i++)
{
p[i].p.read();
p[i].id = i;
}
solve(, n << );
for (int i = ; i <= n; i++)
{
printf("%d\n", ans[i] - n);
}
}
return ;
}

1411 - Ants(巨人与鬼)的更多相关文章

  1. UVaLive4043 UVa1411 Ants 巨人与鬼

    题意:给出平面上n个白点n个黑点,要求两两配对,且配对所连线段没有交点. 法一:暴力 随机一个初始方案,枚举任意两条线段如果有交点就改一下. 效率其实挺好的. 法二:二分图最佳完美匹配 显然没有交点的 ...

  2. UVA 1411 - Ants(二分图完美匹配)

    UVA 1411 - Ants 题目链接 题意:给定一些黑点白点,要求一个黑点连接一个白点,而且全部线段都不相交 思路:二分图完美匹配,权值存负的欧几里得距离,这种话,相交肯定比不相交权值小,所以做一 ...

  3. UVa 1411 Ants(分治)

    https://vjudge.net/problem/UVA-1411 题意:n只蚂蚁和n颗苹果树,一一配对并且不能交叉. 思路:这就是巨人与鬼的问题.用分治法就行了. #include<ios ...

  4. uva 1411 Ants (权值和最小的完美匹配---KM算法)

    uva 1411 Ants Description Young naturalist Bill studies ants in school. His ants feed on plant-louse ...

  5. poj 3565 uva 1411 Ants KM算法求最小权

    由于涉及到实数,一定,一定不能直接等于,一定,一定加一个误差<0.00001,坑死了…… 有两种事物,不难想到用二分图.这里涉及到一个有趣的问题,这个二分图的完美匹配的最小权值和就是答案.为啥呢 ...

  6. uva 1411 Ants

    题意: 一个平面上有n个黑色的点,n个白色的点,要求黑色的点与白色点之间一一配对,且线段之间不相交. 思路: 线段不相交并不好处理,想了很久想不出,所以看了蓝书的讲解. 一个很明显的结论是,不相交的线 ...

  7. 【uva 1411 Ants蚂蚁们】

    题目大意: ·给你一个n,表示输入n个白点和n个黑点(输入每一个点的坐标).现在需要将各个白点和各个黑点一一用线段连接起来,需要满足这些线段不能够相交. ·特色: 我们如何保证线段间不相交. ·分析: ...

  8. UVa 二分图匹配 Examples

    这些都是刘汝佳的算法训练指南上的例题,基本包括了常见的几种二分图匹配的算法. 二分图是这样一个图,顶点分成两个不相交的集合X , Y中,其中同一个集合中没有边,所有的边关联在两个集合中. 给定一个二分 ...

  9. 【UVA 1411】 Ants (KM)

    Young naturalist Bill studies ants in school. His ants feed onplant-louses that live on apple trees. ...

随机推荐

  1. 搭建Hexo博客(四)-设置

    1.主题 比较流行的是yilia,下载主题到theme目录即可.再根据说明文档进行设置. 2.图片发布 source下创建的目录,并且目录下有文件,则文件会被生成到post目录中.图片可以放在这里.既 ...

  2. Android PowerManager电源管理(Android N )

    ./frameworks/base/core/java/android/os/PowerManager.java该类提供给Application访问电源相关接口. 它的内部类WakeLock是定义的唤 ...

  3. Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot

    题意:给出一段操作序列 和目的地 问修改(只可以更改 不可以删除或添加)该序列使得最后到达终点时  所进行的修改代价最小是多少 其中代价的定义是  终点序号-起点序号-1 思路:因为代价是终点序号减去 ...

  4. 【XSY2484】mex 离散化 线段树

    题目大意 给你一个无限长的数组,初始的时候都为\(0\),有3种操作: 操作\(1\)是把给定区间\([l,r]\)设为\(1\): 操作\(2\)是把给定区间\([l,r]\)设为\(0\): 操作 ...

  5. MT【291】2元非齐次不等式

    实数$x,y$满足$x^2+y^2=20,$求$xy+8x+y$的最大值___ 法一:$xy\le\dfrac{1}{4}x^2+y^2,8x\le x^2+16,y\le\dfrac{1}{4}y^ ...

  6. 【AtCoder - 2300】Snuke Line(树状数组)

    BUPT2017 wintertraining(15) #9A 题意 有n个纪念品,购买区间是\([l_i,r_i]\).求每i(1-m)站停一次,可以买到多少纪念品. 题解 每隔d站停一次的列车,一 ...

  7. NOIP2018联赛总结

    NOIP2018联赛总结 Day 0 打了几个模板,看了一下别人的博客,背了一下vimrc Day 1 到了考场,先把vimrc配好 打开题目一先把三道题瞄了一眼,\(T1\)似乎是NOIP原题,\( ...

  8. 自学Python4.7-生成器(方式一:生成器函数)

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  9. Bug预防体系(上千bug分析后总结的最佳实践)

    Bug预防体系(上千bug分析后总结的最佳实践) 原创 2017-08-16俞美玲 光荣之路 吴老的<selenium webdriver 实战宝典>出版了!  web常见产品问题及预防 ...

  10. 【mysql】 mysql忘记密码

    先关闭mysql服务 [root@localhost ~]# service mysql status Redirecting to /bin/systemctl status mysql.servi ...