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++. ...
随机推荐
- 使用Netcat进行攻击
https://www.freebuf.com/column/135007.html 在网上找到了一个开启了ftp服务的服务: http://static.vhdong.com/Upload/Temp ...
- 读书笔记 effective c++ Item 42 理解typename的两种涵义
1. class和typename含义相同的例子 问题:在下面的模板声明中class和typename的区别是什么? template<class T> class Widget; // ...
- Web Api - HttpMessageHandler 学习
参考: 1.http://www.cnblogs.com/chenboyi081/p/4995252.html 2.http://www.cnblogs.com/r01cn/archive/2012/ ...
- 签名DLL
签名DLL 首先需要一个密钥文件,后缀为.snk 密钥文件使用sn.exe 创建: sn.exe /k MySingInKey.snk sn.exe 工具的具体使用,可以通过 sn.exe /h 或 ...
- 洛谷P1242 新汉诺塔
传送门啦 首先要将第n个盘子从x到y,那么就要把比n小的盘子全部移到6-x-y,然后将n移到y 仔细想想:6代表的是3根初始柱,3根目标柱. 6-(x+y) 便是我们的中转柱了,因为到这个位置是最优的 ...
- java 多线程总结篇1之——基本概念
1.什么是线程 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,每个线程 ...
- JS中精选this关键字的指向规律你记住了吗
1.首先要明确: 谁最终调用函数,this指向谁 this指向的永远只可能是对象!!!!! this指向谁永远不取决于this写在哪,而取 ...
- C++之可调用对象
C++中的可调用对象分为以下几种: 函数 函数指针 lambda表达式 bind创建的对象 重载了函数调用运算符(即“()”)的类 函数.函数指针不再介绍.lambda表达式与bind创建的类参考—— ...
- xss攻击原理与解决方法
概述 XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列 表,然后向联系 ...
- Oracle与Sqlserver数据共享
需求:在一个集成平台中有一个主系统使用的是Oralce数据库,子系统使用的SqlServer 数据库,如何让子系统的数据库与主系统的人员同步呢? 思路:通过服务WebService 公开接口 1.与主 ...