uva 1595 Symmetry“结构体”
给出平面上N(N<=1000)个点。问是否可以找到一条竖线,使得所有点左右对称,如图所示:
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“结构体”的更多相关文章
- uva 1595 - Symmetry
思路:首先,如果这些点对称,那么它们的对称轴是x = m(m是所有点横坐标的平均值): 把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这个点是否在集合里面. 如果有 ...
- 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 ...
- UVa 1595 Symmetry (set && math)
题意:给出n个在直角坐标系上的点,问你能不能找出一条竖轴(即垂直于x的轴)使得所有的点根据这条轴对称,能则输出YES,否则输出NO 分析:首先需要找到对称轴的值,将所有n个点的x轴的值加起来然后去除以 ...
- Go结构体实现类似成员函数机制
Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...
- C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱
一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...
- go语言结构体
定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...
- C语言中的结构体
用户自己建立自己的结构体类型 1. 定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...
- C++_系列自学课程_第_12_课_结构体
#include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...
- java socket传送一个结构体给用C++编写的服务器解析的问题
另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...
随机推荐
- socket网络编程中的同步,异步,阻塞式,非阻塞式,有何联系与区别?
一.举个打电话的例子: 阻塞 block 是指,你拨通某人的电话,但是此人不在,于是你拿着电话等他回来,其间不能再用电话.同步大概和阻塞差不多. 非阻塞 nonblock 是指,你拨通 ...
- 【Nutch2.2.1基础教程之3】Nutch2.2.1配置文件
nutch-site.xml 在nutch2.2.1中,有两份配置文件:nutch-default.xml与nutch-site.xml. 其中前者是nutch自带的默认属性,一般情况下不要修改. 如 ...
- Python爬虫学习:一、相关概念与基础知识
爬虫: 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽 ...
- 第一个程序 - Windows程序设计(SDK)001
愉快的开始 让编程改变世界 Change the world by program 编译器安装 我们经常说的 VS 指的就是 Microsoft Visual Studio 的简称,它是微软开发工具的 ...
- Android广播机制(转)
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- Linux下安装并启动MongDB
1.下载MongoDB 下载链接: http://www.mongodb.org/downloads 2.解压下载的压缩包 tar -zxvf mongodb-linux-x86_64-3.2.8.t ...
- UBUNTU13.04下Gedit打开txt文件乱码解决方法
刚刚装的ubuntu13.04,在用ubuntu下的gedit打开win7下的txt文件时中文显示乱码,这是因为编码方式不同造成的.windows下文件的编码方式是GBK,而ubuntu下gedit默 ...
- cf C. Xenia and Weights
http://codeforces.com/contest/339/problem/C #include <cstdio> #include <cstring> #includ ...
- 《Programming WPF》翻译 第7章 6.视频和3-D
原文:<Programming WPF>翻译 第7章 6.视频和3-D 虽然详细地讨论视频和3-D超越了这本书的范围,但是获得这些特征的支持是值得的. 视频由MediaElement类型支 ...
- Java学习系列(一)Java的运行机制、JDK的安装配置及常用命令详解
俗话说:“十五的月亮十六圆”.那学习是不是也是如此呢?如果把月亮看成是我们的愿望,那十五便是我们所处的“高原期”,坚持迈过这个坎,我相信你的愿望终究会现实的.记得马云曾说:今天很残酷,明天更残酷,后天 ...