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(分治)的更多相关文章

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

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

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

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

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

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

  4. uva 1411 Ants

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

  5. 【uva 1411 Ants蚂蚁们】

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

  6. 【UVA 1411】 Ants (KM)

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

  7. UVA 10714 Ants 蚂蚁 贪心+模拟 水题

    题意:蚂蚁在木棍上爬,速度1cm/s,给出木棍长度和每只蚂蚁的位置,问蚂蚁全部下木棍的最长时间和最短时间. 模拟一下,发现其实灰常水的贪心... 不能直接求最大和最小的= =.只要求出每只蚂蚁都走长路 ...

  8. Ants UVA - 1411(km板题竟然让我换了个板子)

    题意: 给出n个白点和n个黑点的坐标,要求用n条不相交的线段把它们连接起来,其中每条线段恰好连接一个白点和一个黑点,每个点恰好连接到一条线段 解析: 带入负的欧几里得距离求就好了 假设a1-b1 与 ...

  9. uva 10714 Ants(贪心)

    题目连接:10714 - Ants 题目大意:一根棍子上有n只蚂蚁, 这些蚂蚁开始可以任意朝着一个方向移动一直走,向左或是向右,并且移动速度是相同的,但是一旦蚂蚁碰到迎面走来的另一只蚂蚁,那么这两只蚂 ...

随机推荐

  1. 对innodb_flush_log_at_commit参数的写日志和刷盘行为进行图解

    对innodb_flush_log_at_commit参数的写日志和刷盘行为进行图解

  2. 自定义Metrics:让Prometheus监控你的应用程序

    前言 Prometheus社区提供了大量的官方以及第三方Exporters,可以满足Prometheus的采纳者快速实现对关键业务,以及基础设施的监控需求. 如上所示,一个简单的应用以及环境架构.一般 ...

  3. gh-ost安装

    下载 : https://github.com/github/gh-ost/releases/tag/v1.0.28 先安装Go语言: sudo yum install golang 将gh-ost文 ...

  4. edgeR使用学习【转载】

    转自:http://yangl.net/2016/09/27/edger_usage/ 1.Quick start 2. 利用edgeR分析RNA-seq鉴别差异表达基因: #加载软件包 librar ...

  5. spark shuffle原理

    1.spark中窄依赖的时候不需要shuffle,只有宽依赖的时候需要shuffle,mapreduce中map到reduce必须经过shuffle 2.spark中的shuffle fetch的时候 ...

  6. Locust性能测试1-环境准备与基本使用

    前言 提到性能测试,大部分小伙伴想到的就是LR和jmeter这种工具,小编一直不太喜欢写这种工具类的东西,我的原则是能用代码解决的问题,尽量不去用工具. python里面也有一个性能测试框架Locus ...

  7. 筛选DataTable中的数据

    DataTable dt = bll.GetTable(); //查询数据 DataTable newdt = new DataTable(); //一个新的table来保存筛选的记录 newdt = ...

  8. ShuffleElements(随机打乱数组中的元素)

    给定一个数组,随机打乱数组中的元素,题意很简单直接上代码: package Array; import java.util.Arrays; import java.util.Collections; ...

  9. 010-centos上安装matlab

    #001-下载matlab_R2015b和破解文件(四个)到百度云盘上下载7.6g#002-上传matlab大文件先安装vm tools,然后直接复制到虚拟机桌面#003-挂载matlab镜像并安装m ...

  10. git参考文档

    ==================================================================================================== ...