给出平面上N(N<=1000)个点。问是否可以找到一条竖线,使得所有点左右对称,如图所示:

则左边的图形有对称轴,右边没有。
 
Sample Input 

3
5
-2 5
0 0
6 5
4 0
2 3
4
2 3
0 4
4 0
0 0
4
5 14
6 10
5 10
6 14

Sample Output

YES
NO
YES 写题永远都是wrong answer.....
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std; const int maxn = ; struct point{
double x, y; bool operator < (const point & rhs) const{
return x < rhs.x;
}
}p[maxn]; int main()
{
int T;
cin >> T;
while(T--){
int n;
double line; //line 为对称轴的位置
bool flag = true; cin >> n; for(int i = ;i < n; i++){
double x, y;
cin >> x >> y;
p[i].x = x;
p[i].y = y;
} sort(p,p+n); for(int i = ; i < n/; i++){
int k = ;
for(int j = n-; j>n/-;j--){
cout<<"** "<<j<<" "<<p[i].y<<" "<<p[j].y<<endl;
if(p[i].y == p[j].y){
p[j].y = -0.111;
k = ;
if(i == )line = ( p[i].x + p[n--i].x ) / 2.0;
else {
double l = ( p[i].x + p[j].x ) / 2.0;
cout<< p[i].x<<" - "<<p[j].x<<endl;
if(l != line){
cout << <<" "<< l<< " "<< line<<endl;
flag = false;
break;
}
}
cout<<"line "<<line<<endl;
break;
}
} if(k){
if(!flag)break;
}
else {
flag = false;
break;
} } if(flag && (n%)){
if(p[n/].x != line )flag = false;
cout<<<<" "<< p[n/].x<<" "<<line<<endl;
} if(flag) cout << "YES" << endl;
else cout << "NO" << endl; }
system("pause");
return ;
}

那就找错。。。

以上代码没有考虑到对称轴上有去多点的情况

将点排序后,先分偶数奇数个点两种情况,根据最中间的两个点或一个点计算出对称轴再进一步判断其他点是否符合

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = ; struct point{
double x, y; bool operator < (const point & rhs) const{
return x < rhs.x;
}
}p[maxn]; int main()
{
int T;
cin >> T;
while(T--){
int n ,n0 ;
double line; //line 为对称轴的位置
bool flag = true; cin >> n; for(int i = ;i < n; i++){
double x, y;
cin >> x >> y;
p[i].x = x;
p[i].y = y;
} sort(p,p+n); if(n%){ //奇数个点
line = p[n/].x;
n0 = n/;
}
else { //偶数个点
line = (p[n/].x+p[n/-].x)/2.0;
n0 = n/-;
} for(int i = ; i <= n0; i++){
int k = ;
for(int j = n-; j>n/-;j--){
if(p[i].y == p[j].y){
p[j].y = -0.111;
k = ;
double l = ( p[i].x + p[j].x ) / 2.0; if(l != line){
flag = false;
break;
} break;
}
else{
if(p[i].x == line&&p[n-i-].x == line){
k = ;
break;
}
} } if(k){
if(!flag)break;
}
else {
flag = false;
break;
} } if(flag) cout << "YES" << endl;
else cout << "NO" << endl; }
//system("pause");
return ;
}

uva 1595 Symmetry“结构体”的更多相关文章

  1. uva 1595 - Symmetry

    思路:首先,如果这些点对称,那么它们的对称轴是x = m(m是所有点横坐标的平均值):   把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这个点是否在集合里面.   如果有 ...

  2. UVa 1595 Symmetry(set)

    We call a figure made of points is left-right symmetric as it is possible to fold the sheet of paper ...

  3. UVa 1595 Symmetry (set && math)

    题意:给出n个在直角坐标系上的点,问你能不能找出一条竖轴(即垂直于x的轴)使得所有的点根据这条轴对称,能则输出YES,否则输出NO 分析:首先需要找到对称轴的值,将所有n个点的x轴的值加起来然后去除以 ...

  4. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  5. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

  6. go语言结构体

    定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...

  7. C语言中的结构体

    用户自己建立自己的结构体类型 1.  定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...

  8. C++_系列自学课程_第_12_课_结构体

    #include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...

  9. java socket传送一个结构体给用C++编写的服务器解析的问题

    另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...

随机推荐

  1. EF 执行顺序--先删除在更新和添加

    public void AcceptAllChanges() { if (this.ObjectStateManager.SomeEntryWithConceptualNullExists()) { ...

  2. CSS的权重(转)

    CSS写的渐渐多了,他的权重问题就不得不昂首面对,之前一直得过且过的将就用着,直到最近遇到了几个大坑,一直割刺着我对前端的热情,得了得了,蒙不过去了,就发点时间记下来吧,当然还是一片转载的文章,有时候 ...

  3. nginx添加第三方模块

    原已经安装好的nginx,现在需要添加一个未被编译安装的模块: nginx -V 可以查看原来编译时都带了哪些参数,看看nginx是哪个版本,去下载一个nginx的源码,解压 原来的参数:--pref ...

  4. cf C. Cupboard and Balloons

    http://codeforces.com/contest/342/problem/C #include <cstdio> #include <cstring> #includ ...

  5. SGU176 Flow construction

    http://acm.sgu.ru/problem.php?contest=0&problem=176 有源汇上下界最小流,可以选择跟有源汇上下界最大流一样的建图方式,然后用二分去二分t-&g ...

  6. BZOJ 1017 魔兽地图DotR(树形DP)

    题意:有两类装备,高级装备A和基础装备B.现在有m的钱.每种B有一个单价和可以购买的数量上限.每个Ai可以由Ci种其他物品合成,给出Ci种其他物品每种需要的数量.每个装备有一个贡献值.求最大的贡献值. ...

  7. Qt下HBoxLayout里的按钮有重叠

    没想到是一个bug,而且六年了都没有解决: https://bugreports.qt.io/browse/QTBUG-14591 http://stackoverflow.com/questions ...

  8. Cocos2d-x程序Windows下VC中文乱码的解决(用MultiByteToWideChar进行转换,VC2010有非常厉害的execution_character_set)

    Cocos2d-x默认字符串常量编码都是UTF8的,而Windows中的VC默认都是跟系统相同,比如简体Windows是GB2312或者GBK.繁体就是BIG5编码.而我们大多数中国人用VC编译出来的 ...

  9. IOS回调机制——代理,通知中心以及Block

    Xcode5.0正式版 IOS7和Xcode5正式版在昨天正式可以下载.IOS7不多说了,交互设计,界面风格,操作的简化程度都属于比较领先的水平. 这里来说说Xcode5正式版,和以前的Xcode5测 ...

  10. nodejs学习笔记之安装、入门

    由于项目需要,最近开始学习nodejs.在学习过程中,记录一些必要的操作和应该注意的点.       首先是如何安装nodejs环境?(我用的是windows 7环境,所以主要是windows 7的例 ...