UVa 1411 Ants(分治)

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

UVa 1411 Ants(分治)的相关文章

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

UVA 1411 - Ants 题目链接 题意:给定一些黑点白点,要求一个黑点连接一个白点,而且全部线段都不相交 思路:二分图完美匹配,权值存负的欧几里得距离,这种话,相交肯定比不相交权值小,所以做一次完美匹配就能够了 代码: #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int MAXNODE = 1

【uva 1411 Ants蚂蚁们】

题目大意: ·给你一个n,表示输入n个白点和n个黑点(输入每一个点的坐标).现在需要将各个白点和各个黑点一一用线段连接起来,需要满足这些线段不能够相交. ·特色: 我们如何保证线段间不相交. ·分析: 由"黑白"可以想到用二分图匹配(最大流问题亦可).用到一个神秘结论,可以巧妙地将"相交"和"不相交"转化为具体数值大小关系,进而转化为权值.用一下这幅图进行分析:           下面来比较线段交叉和不交叉情况下,两条线段和的大小: ①交叉线段

Ants UVA - 1411(竟然让我换了个板子)

题意: 给出n个白点和n个黑点的坐标,要求用n条不相交的线段把它们连接起来,其中每条线段恰好连接一个白点和一个黑点,每个点恰好连接到一条线段 解析: 带入负的欧几里得距离求就好了 假设a1-b1 与 a2-b2相交 则dis(a1, b1) + dis(a2, b2) 一定大于 dis(a1, b2) + dis(a2, b1) 四边形的对角线一定大于两条对边... 所以..边的权值取负的欧几里得距离..来一次km就好了   km是求最大  而负的最大 对应整的最小 而整的最小 又能对应不相交

UVA - 10714 Ants

最多时间就是每只蚂蚁选择最久的爬行方式 最少时间就是每只蚂蚁选择最快地爬行方式 #include<iostream> #include<map> #include<string> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> #include<queue> #include<vector> #include&

uva 507 Jill Rides Again (分治)

uva 507 Jill Rides Again Jill likes to ride her bicycle, but since the pretty city of Greenhills where she lives has grown, Jill often uses the excellent public bus system for part of her journey. She has a folding bicycle which she carries with her

uva 10881 Piotr&#39;s Ants 解题报告

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_problem&problem=1822 题目意思:有一条 L 厘米长的杆,上面有 n 只蚂蚁,给出每只蚂蚁的朝向以及离杆上最左端的距离,问 T 秒之后每只蚂蚁到达的位置,如果 T 秒后某个位置有多只蚂蚁同时到达,那么这堆蚂蚁处于的位置 + Turning,如果超过这条杆的长度,输出F

UVa 10881 Piotr&#39;s Ants (等价变换)

题意:一个长度为L的木棍上有n个蚂蚁,每只蚂蚁要么向左,要么向右,速度为1,当两只蚂蚁相撞时, 它们同时掉头.给定每只蚂蚁初始位置和朝向,问T秒后,每只蚂蚁的状态. 析:刚看到这个题时,一点思路也没有,怎么做啊,难道又要模拟么,一想,模拟...天呐,好麻烦! 最终还是看了一下题解.真是很巧妙哪. 首先是当两个蚂蚁相撞时,转向和不转向是看不出来的.也就是说掉头等价于对穿而过.也就是说, 如果把蚂蚁看成是没有区别的小点,那么只要独立算每只蚂蚁的位置即可.虽然是这么说,但是, 对每只蚂蚁却不是这样,但

【UVa 10881】Piotr&#39;s Ants

Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: there is no stopping them;the ants will soon be here. And I, for one, welcome our new insect overlords."Kent Brockman Piotr likes playing with ants. H

uva 10881 Piotr&#39;s Ants (模拟)

uva 10881 Piotr's Ants "One thing is for certain: there is no stopping them; the ants will soon be here. And I, for one, welcome our new insect overlords."Kent Brockman Piotr likes playing with ants. He has n of them on a horizontal pole L cm lo