Codeforces Beta Round #97 (Div. 1) B. Rectangle and Square 暴力
B. Rectangle and Square
题目连接:
http://codeforces.com/contest/135/problem/B
Description
Little Petya very much likes rectangles and especially squares. Recently he has received 8 points on the plane as a gift from his mother. The points are pairwise distinct. Petya decided to split them into two sets each containing 4 points so that the points from the first set lay at the vertexes of some square and the points from the second set lay at the vertexes of a rectangle. Each point of initial 8 should belong to exactly one set. It is acceptable for a rectangle from the second set was also a square. If there are several partitions, Petya will be satisfied by any of them. Help him find such partition. Note that the rectangle and the square from the partition should have non-zero areas. The sides of the figures do not have to be parallel to the coordinate axes, though it might be the case.
Input
You are given 8 pairs of integers, a pair per line — the coordinates of the points Petya has. The absolute value of all coordinates does not exceed 104. It is guaranteed that no two points coincide.
Output
Print in the first output line "YES" (without the quotes), if the desired partition exists. In the second line output 4 space-separated numbers — point indexes from the input, which lie at the vertexes of the square. The points are numbered starting from 1. The numbers can be printed in any order. In the third line print the indexes of points lying at the vertexes of a rectangle in the similar format. All printed numbers should be pairwise distinct.
If the required partition does not exist, the first line should contain the word "NO" (without the quotes), after which no output is needed.
Sample Input
xudyhduxyz
0 0
10 11
10 0
0 11
1 1
2 2
2 1
1 2
Sample Output
YES
5 6 7 8
1 2 3 4
题意
给你8个点,你需要分成2个set,使得左边那个set里面的点构成正方形,右边那个set里面的点构成长方形
问你可不可以,如果可以输出方案
题解:
只有8个点,直接暴力就好了……
判断直角,就直接点积就好了
代码
#include<bits/stdc++.h>
using namespace std;
const double eps = 1e-6;
double a[10],b[10];
vector<int>tmp,ans1,ans2;
double dis(int x,int y)
{
return (a[x]-a[y])*(a[x]-a[y])+(b[x]-b[y])*(b[x]-b[y]);
}
double pointx(int x,int y,int z)
{
double x1=a[y]-a[x],y1=b[y]-b[x];
double x2=a[z]-a[x],y2=b[z]-b[x];
return x1*x2+y1*y2;
}
bool check()
{
double len[4];
for(int i=0;i<4;i++)len[i]=dis(tmp[i],tmp[(i+1)%4]);
for(int i=0;i<4;i++)for(int j=0;j<4;j++)if(fabs(len[i]-len[j])>eps)return false;
if(fabs(pointx(tmp[0],tmp[1],tmp[3]))>eps)return false;
if(fabs(pointx(tmp[1],tmp[0],tmp[2]))>eps)return false;
if(fabs(pointx(tmp[2],tmp[1],tmp[3]))>eps)return false;
if(fabs(pointx(tmp[3],tmp[2],tmp[0]))>eps)return false;
for(int i=0;i<4;i++)len[i]=dis(tmp[i+4],tmp[(i+1)%4+4]);
if(fabs(len[0]-len[2])>eps)return false;
if(fabs(len[1]-len[3])>eps)return false;
if(fabs(pointx(tmp[4],tmp[5],tmp[7]))>eps)return false;
if(fabs(pointx(tmp[5],tmp[4],tmp[6]))>eps)return false;
if(fabs(pointx(tmp[6],tmp[5],tmp[7]))>eps)return false;
if(fabs(pointx(tmp[7],tmp[6],tmp[4]))>eps)return false;
return true;
}
int main()
{
for(int i=0;i<8;i++)
{
scanf("%lf%lf",&a[i],&b[i]);
tmp.push_back(i);
}
do{
if(check())
{
printf("YES\n");
for(int i=0;i<4;i++)cout<<tmp[i]+1<<" ";
printf("\n");
for(int i=4;i<8;i++)cout<<tmp[i]+1<<" ";
return 0;
}
}while(next_permutation(tmp.begin(),tmp.end()));
printf("NO\n");
}
Codeforces Beta Round #97 (Div. 1) B. Rectangle and Square 暴力的更多相关文章
- Codeforces Beta Round #97 (Div. 1) C. Zero-One 数学
C. Zero-One 题目连接: http://codeforces.com/contest/135/problem/C Description Little Petya very much lik ...
- Codeforces Beta Round #97 (Div. 1) A. Replacement 水题
A. Replacement 题目连接: http://codeforces.com/contest/135/problem/A Description Little Petya very much ...
- Codeforces Beta Round #97 (Div. 1)
B 判矩阵的时候 出了点错 根据点积判垂直 叉积判平行 面积不能为0 #include <iostream> #include<cstdio> #include<cstr ...
- Codeforces Beta Round #97 (Div. 2)
A题求给出映射的反射,水题 #include <cstdio> int x,ans[105],n; int main(){ scanf("%d",&n); fo ...
- Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力
A. Prime Permutation 题目连接: http://www.codeforces.com/contest/123/problem/A Description You are given ...
- Codeforces Beta Round #4 (Div. 2 Only) A. Watermelon【暴力/数学/只有偶数才能分解为两个偶数】
time limit per test 1 second memory limit per test 64 megabytes input standard input output standard ...
- Codeforces Beta Round #80 (Div. 2 Only)【ABCD】
Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...
- Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...
- Codeforces Beta Round #79 (Div. 2 Only)
Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...
随机推荐
- RESTful Web 服务:教程
RESTful Web 服务:教程 随着 REST 成为大多数 Web 和 Mobile 应用的默认选择,势必要对它的基本原理有所了解. 在它提出十多年后的今天,REST 已经成为最重要的 Web ...
- VirtualBox上安装CentOS-7(Minimal)
Windows 10家庭中文版,VirtualBox 5.2.12,CentOS 7(Minimal版), 因为听到大家在谈论CentOS,阿里云上也有CentOS,CentOS还是Red Hat出品 ...
- Flask:初见
Windows 10家庭中文版,Python 3.6.4 从Flask官网开始学起. 介绍 Flask是一个Python的Web开发微框架,基于Werkzeug.Jinja2模块(and good i ...
- python网络编程--RabbitMQ
一:RabbitMQ介绍 RabbitMQ是AMPQ(高级消息协议队列)的标准实现.也就是说是一种消息队列. 二:RabbitMQ和线程进程queue区别 线程queue:不能跨进程,只能用于多个线程 ...
- ZOJ 3537 Cake(凸包+区间DP)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3537 题目大意:给出一些点表示多边形顶点的位置,如果不是凸多边形 ...
- Ubuntu 16.04 使用docker资料汇总与应用docker安装caffe并使用Classifier(ros kinetic+usb_cam+caffe)
Docker是开源的应用容器引擎.若想简单了解一下,可以参考百度百科词条Docker.好像只支持64位系统. Docker官网:https://www.docker.com/ Docker - 从入门 ...
- Registry私有仓库搭建及认证
本节内容: Registry相关概念 Registry V1和V2 安装Docker 搭建本地registry v2 搭建外部可访问的Registry 添加认证 更高级的认证 registry web ...
- zabbix监控多实例tomcat--不使用JMX
https://blog.csdn.net/nisan892541/article/details/47727967
- Spark(十四)SparkStreaming的官方文档
一.SparkCore.SparkSQL和SparkStreaming的类似之处 二.SparkStreaming的运行流程 2.1 图解说明 2.2 文字解说 1.我们在集群中的其中一台机器上提交我 ...
- Linux mint 17.3系统安装及常用开发办公软件部署
关于为什么选择linuxmint17.3作为个人办公开发系统的选择说明: 编者按]提起Linux系统,大家可能最先想到的就是 Linux Mint 和 Ubuntu 两个版本了.近来,开源界貌似激进了 ...