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只蚂蚁, 这些蚂蚁开始可以任意朝着一个方向移动一直走,向左或是向右,并且移动速度是相同的,但是一旦蚂蚁碰到迎面走来的另一只蚂蚁,那么这两只蚂 ...
随机推荐
- MySQL架构简介
- Groovy介绍
关于 Groovy 这一节将学习 Groovy 的基础知识:它是什么,它与 Java 语言和 JVM 的关系,以及编写 Groovy 代码的一些要点. 一.什么是 Groovy? Groovy 是 J ...
- Tesseract-OCR 训练过程 V3.02
软件: jTessBoxEditor Version 0.9 (30 April 2013) Tesseract-OCR win32 v3.02 with Leptonica 训练步骤: 1. ...
- Keepalived安装后出现的问题总结
1. 在配好主从备份之后,发现虚拟IP能ping通,但是访问虚拟IP对应机器上的服务(不是apache或者mysql之类的公用软件)却不成功,这是因为要访问的服务绑定了主机上的一个实体IP不是INAD ...
- cocos代码研究(2)Label学习笔记
理论部分 Label类继承自Node类,中文翻译文字与字体,通常在应用开发中为模块作为提示和描述的作用,主要有3中不同的创建方式. 1.通过ttf字体包创建,通过指定本地已有的ttf格式的字体文件,创 ...
- sql 关于存储过程的查询
--查数据库中所有的存储过程select * from sys.procedures ----------------------查数据库中所有的存储过程select o.name from sysc ...
- Integer类之缓存
在开始详细的说明问题之前,我们先看一段代码 1 public static void compare1(){ 2 Integer i1 = 127, i2 = 127, i3 = 128, i4 = ...
- mysql的锁机制
一.读锁(共享锁/Share Locks,S锁). 1.select * from table_name where ... lock in share mode.(事务A) (1)这种方式是获取指定 ...
- Python: TypeError: 'dict' object is not callable
问题: TypeError: 'dict' object is not callable 原因: dict()是python的一个内建函数,如果将dict自定义为一个python字典,在之后想调用 ...
- Java设计模式应用——观察者模式
告警结果产生后,可能需要发送短信,邮件,故障管理系统.这些转发操作不应当影响告警生成入库,并且类似事件可能根据不同场景,客户习惯不同,此时,使用观察者模式则可以很好的适应上述场景. 观察者模式应当包括 ...