UVa 1411 Ants(分治)
https://vjudge.net/problem/UVA-1411
题意:n只蚂蚁和n颗苹果树,一一配对并且不能交叉。
思路:这就是巨人与鬼的问题。用分治法就行了。
#include<iostream>
#include<algorithm>
#include<set>
using namespace std; int n;
const int maxn = ; int vis[maxn]; struct node
{
int x, y;
int id;
int flag;
}ans[maxn]; node s; bool cmp1(node a, node b) //按y坐标从小到大排序
{
return a.y < b.y || (a.y == b.y && a.x < b.x);
} bool cmp2(node a, node b) //极角从小到大排序
{
return ((a.x - s.x)*(b.y - s.y) - (a.y - s.y)*(b.x - s.x))<;
} void solve(int l,int r)
{
if (l>r) return;
sort(ans + l, ans + r + , cmp1);
s = ans[l];
sort(ans + l + , ans + r + , cmp2);
int cnt1 = , cnt2 = ;
int k = r;
while (!(s.flag != ans[k].flag && cnt1 == cnt2))
{
if (ans[k].flag == s.flag) cnt1++;
else cnt2++;
k--;
}
if (!s.flag) vis[s.id] = ans[k].id;
else vis[ans[k].id] = s.id;
solve(l + , k - );
solve(k + , r);
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (cin >> n && n)
{
for (int i = ; i <= n; i++)
{
cin >> ans[i].x >> ans[i].y;
ans[i].id = i; //蚂蚁编号
ans[i].flag = ; //0代表蚂蚁
}
for (int i = n + ; i <= * n; i++)
{
cin >> ans[i].x >> ans[i].y;
ans[i].id = i - n; //苹果树编号
ans[i].flag = ; //1代表苹果树
}
solve(,*n);
for (int i = ; i <= n; i++)
cout << vis[i] << endl;
}
return ;
}
UVa 1411 Ants(分治)的更多相关文章
- UVA 1411 - Ants(二分图完美匹配)
UVA 1411 - Ants 题目链接 题意:给定一些黑点白点,要求一个黑点连接一个白点,而且全部线段都不相交 思路:二分图完美匹配,权值存负的欧几里得距离,这种话,相交肯定比不相交权值小,所以做一 ...
- uva 1411 Ants (权值和最小的完美匹配---KM算法)
uva 1411 Ants Description Young naturalist Bill studies ants in school. His ants feed on plant-louse ...
- poj 3565 uva 1411 Ants KM算法求最小权
由于涉及到实数,一定,一定不能直接等于,一定,一定加一个误差<0.00001,坑死了…… 有两种事物,不难想到用二分图.这里涉及到一个有趣的问题,这个二分图的完美匹配的最小权值和就是答案.为啥呢 ...
- uva 1411 Ants
题意: 一个平面上有n个黑色的点,n个白色的点,要求黑色的点与白色点之间一一配对,且线段之间不相交. 思路: 线段不相交并不好处理,想了很久想不出,所以看了蓝书的讲解. 一个很明显的结论是,不相交的线 ...
- 【uva 1411 Ants蚂蚁们】
题目大意: ·给你一个n,表示输入n个白点和n个黑点(输入每一个点的坐标).现在需要将各个白点和各个黑点一一用线段连接起来,需要满足这些线段不能够相交. ·特色: 我们如何保证线段间不相交. ·分析: ...
- 【UVA 1411】 Ants (KM)
Young naturalist Bill studies ants in school. His ants feed onplant-louses that live on apple trees. ...
- UVA 10714 Ants 蚂蚁 贪心+模拟 水题
题意:蚂蚁在木棍上爬,速度1cm/s,给出木棍长度和每只蚂蚁的位置,问蚂蚁全部下木棍的最长时间和最短时间. 模拟一下,发现其实灰常水的贪心... 不能直接求最大和最小的= =.只要求出每只蚂蚁都走长路 ...
- Ants UVA - 1411(km板题竟然让我换了个板子)
题意: 给出n个白点和n个黑点的坐标,要求用n条不相交的线段把它们连接起来,其中每条线段恰好连接一个白点和一个黑点,每个点恰好连接到一条线段 解析: 带入负的欧几里得距离求就好了 假设a1-b1 与 ...
- uva 10714 Ants(贪心)
题目连接:10714 - Ants 题目大意:一根棍子上有n只蚂蚁, 这些蚂蚁开始可以任意朝着一个方向移动一直走,向左或是向右,并且移动速度是相同的,但是一旦蚂蚁碰到迎面走来的另一只蚂蚁,那么这两只蚂 ...
随机推荐
- vue项目中px自动转换为rem
.安装 postcss-pxtorem : npm install postcss-pxtorem -D .修改 /build/utils.js 文件 找到 postcssLoader const p ...
- Ubuntu 下Apache安装和配置
在Ubuntu上安装Apache,有两种方式:1 使用开发包的打包服务,例如使用apt-get命令:2 从源码构建Apache.本文章将详细描述这两种不同的安装方式. 方法一:使用开发包的打包服务—— ...
- Selenium+Java元素定位之三
首先自己先准备一个表格代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- localhost和本机IP和127.0.0.1之间的区别
参考出处:https://www.zhihu.com/question/23940717 localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0 ...
- 浅谈Android View滑动和弹性滑动
引言 View的滑动这一块在实际开发中是非常重要的,无论是优秀的用户体验还是自定义控件都是需要对这一块了解的,我们今天来谈一下View的滑动. View的滑动 View滑动功能主要可以使用3种方式来实 ...
- svg绘图工具raphael.js的使用
1.raphael.js svg画图的开源库,支持IE8+ 官方api: http://dmitrybaranovskiy.github.io/raphael/reference.html Githu ...
- Yahoo数据仓库架构简介
1. Yahoo数据仓库的整体架构 Yahoo数据仓库在基础架构上由hadoop集群和Oracle集群组成,hadoop集群是一个计算平台,完成所有ETL数据处理过程:Oracle集群只是一个查询环境 ...
- python 处理xml
XML XML指可扩展标记语言(Extensible Markup Language) XML被设计用于结构化.存储和传输数据 XML是一种标记语言,很类似于HTML XML没有像HTML那样 ...
- ajax请求头设置 | header 传token
$('.w-entry-btn').on('tap',function(){ var urlAddress = '/api/address'; var valToken = JSON.parse(lo ...
- 单片机裸机下写一个自己的shell调试器(转)
源: 单片机裸机下写一个自己的shell调试器