https://vjudge.net/problem/UVA-1411

题意:n只蚂蚁和n颗苹果树,一一配对并且不能交叉。

思路:这就是巨人与鬼的问题。用分治法就行了。

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<set>
  4. using namespace std;
  5.  
  6. int n;
  7. const int maxn = ;
  8.  
  9. int vis[maxn];
  10.  
  11. struct node
  12. {
  13. int x, y;
  14. int id;
  15. int flag;
  16. }ans[maxn];
  17.  
  18. node s;
  19.  
  20. bool cmp1(node a, node b) //按y坐标从小到大排序
  21. {
  22. return a.y < b.y || (a.y == b.y && a.x < b.x);
  23. }
  24.  
  25. bool cmp2(node a, node b) //极角从小到大排序
  26. {
  27. return ((a.x - s.x)*(b.y - s.y) - (a.y - s.y)*(b.x - s.x))<;
  28. }
  29.  
  30. void solve(int l,int r)
  31. {
  32. if (l>r) return;
  33. sort(ans + l, ans + r + , cmp1);
  34. s = ans[l];
  35. sort(ans + l + , ans + r + , cmp2);
  36. int cnt1 = , cnt2 = ;
  37. int k = r;
  38. while (!(s.flag != ans[k].flag && cnt1 == cnt2))
  39. {
  40. if (ans[k].flag == s.flag) cnt1++;
  41. else cnt2++;
  42. k--;
  43. }
  44. if (!s.flag) vis[s.id] = ans[k].id;
  45. else vis[ans[k].id] = s.id;
  46. solve(l + , k - );
  47. solve(k + , r);
  48. }
  49.  
  50. int main()
  51. {
  52. //freopen("D:\\txt.txt", "r", stdin);
  53. while (cin >> n && n)
  54. {
  55. for (int i = ; i <= n; i++)
  56. {
  57. cin >> ans[i].x >> ans[i].y;
  58. ans[i].id = i; //蚂蚁编号
  59. ans[i].flag = ; //0代表蚂蚁
  60. }
  61. for (int i = n + ; i <= * n; i++)
  62. {
  63. cin >> ans[i].x >> ans[i].y;
  64. ans[i].id = i - n; //苹果树编号
  65. ans[i].flag = ; //1代表苹果树
  66. }
  67. solve(,*n);
  68. for (int i = ; i <= n; i++)
  69. cout << vis[i] << endl;
  70. }
  71. return ;
  72. }

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. MySQL架构简介

  2. Groovy介绍

    关于 Groovy 这一节将学习 Groovy 的基础知识:它是什么,它与 Java 语言和 JVM 的关系,以及编写 Groovy 代码的一些要点. 一.什么是 Groovy? Groovy 是 J ...

  3. Tesseract-OCR 训练过程 V3.02

    软件: jTessBoxEditor Version 0.9 (30 April 2013) Tesseract-OCR win32 v3.02 with Leptonica   训练步骤:   1. ...

  4. Keepalived安装后出现的问题总结

    1. 在配好主从备份之后,发现虚拟IP能ping通,但是访问虚拟IP对应机器上的服务(不是apache或者mysql之类的公用软件)却不成功,这是因为要访问的服务绑定了主机上的一个实体IP不是INAD ...

  5. cocos代码研究(2)Label学习笔记

    理论部分 Label类继承自Node类,中文翻译文字与字体,通常在应用开发中为模块作为提示和描述的作用,主要有3中不同的创建方式. 1.通过ttf字体包创建,通过指定本地已有的ttf格式的字体文件,创 ...

  6. sql 关于存储过程的查询

    --查数据库中所有的存储过程select * from sys.procedures ----------------------查数据库中所有的存储过程select o.name from sysc ...

  7. Integer类之缓存

    在开始详细的说明问题之前,我们先看一段代码 1 public static void compare1(){ 2 Integer i1 = 127, i2 = 127, i3 = 128, i4 = ...

  8. mysql的锁机制

    一.读锁(共享锁/Share Locks,S锁). 1.select * from table_name where ... lock in share mode.(事务A) (1)这种方式是获取指定 ...

  9. Python: TypeError: 'dict' object is not callable

    问题:  TypeError: 'dict' object is not callable 原因:  dict()是python的一个内建函数,如果将dict自定义为一个python字典,在之后想调用 ...

  10. Java设计模式应用——观察者模式

    告警结果产生后,可能需要发送短信,邮件,故障管理系统.这些转发操作不应当影响告警生成入库,并且类似事件可能根据不同场景,客户习惯不同,此时,使用观察者模式则可以很好的适应上述场景. 观察者模式应当包括 ...