码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 1595 Symmetry

时间:2019-02-15 13:58:34      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:vat   函数   algo   cst   style   结构   pac   space   bool   

思路:

  这道题和 UVA221 Urban Elevations 思路一样的;用结构体pot存x,y的值;

  用double数组x存下每一个可以做对称轴的点,然后sort,unique,然后遍历每一个对称轴,

  写一个函数看看这个对称轴可不可以完成折叠;怎么看可不可以完成折叠呢?

  首先把一个坐标轴上的点都用 map<pot,bool> 存起来,再遍历一些点看看它的对称点

  在不在坐标轴上,如果都在说明可以折叠。

注意:

  结构体pot要重载 < 才能做map的key。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<map>
 4 #include<algorithm>
 5 using namespace std;
 6 #define maxn 1010
 7 struct pot {
 8     int x, y;
 9     bool operator<(const pot &p)const//重载<
10     {
11         return this->x < p.x || (this->x == p.x&&this->y < p.y);
12     }
13 };
14 map<pot, bool> pic;//每个点在是否在坐标轴上
15 double x[maxn*2];
16 pot p,pots[maxn];
17 int n;
18 bool find(double mx)//以mx为轴可不可以折叠
19 {
20     for (int i = 0; i <= n/2; i++)
21     {
22         pot p1;//p1是以mx为轴的pots[i]的对称点
23         p1.x = mx*2-pots[i].x;
24         p1.y = pots[i].y;
25         if (!pic[p1])//对称点在坐标轴上
26         {
27             return false;
28         }
29     }
30     return true;
31 }
32 
33 int main()
34 {
35     int t;
36     scanf("%d", &t);
37     while (t--)
38     {
39         scanf("%d", &n);
40         for (int i = 0; i < n; i++)
41         {
42             scanf("%d%d", &p.x, &p.y);
43             pots[i] = p;
44             pic[p] = true;
45             x[i*2] = p.x;
46             if (i != 0)//两点的中点也可以做对称轴
47                 x[(i-1) * 2 + 1] = (x[(i - 1) * 2] + x[i * 2]) / 2.0;
48 
49         }
50 
51         sort(x, x + n*2);
52         int m = unique(x, x + n*2) - x;
53 
54         bool ok = false;
55         for (int i = 0; i < m; i++)
56         {
57             if (find(x[i]))
58             {
59                 ok = true;
60                 //printf("i=%d x[%d]=%lf\n", i,i,x[i]);
61                 break;
62             }
63         }
64 
65         if (ok)
66             printf("YES\n");
67         else
68             printf("NO\n");
69     }
70 
71     return 0;
72 }

 

UVA 1595 Symmetry

标签:vat   函数   algo   cst   style   结构   pac   space   bool   

原文地址:https://www.cnblogs.com/fudanxi/p/10383002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!