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++. ...
随机推荐
- 一步一步搭建 oracle 11gR2 rac + dg 之前传 (一)【转】
一步一步在RHEL6.5+VMware Workstation 10上搭建 oracle 11gR2 rac + dg 之前传 (一) 转自 一步一步搭建 oracle 11gR2 rac + dg ...
- qt使用动态库(DLL)
本文主要讲解在QT开发环境中如何使用VC生成的DLL及QT自身生成的DLL.至于其它情况本文不作讨论. 连接库分为2种 (1)动态连接库,通常有.h .lib .dll三个文件,功能实现在dll中 ( ...
- Vue起步
Vue起步 Vue.js是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式javascript框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用. ...
- 使用postman做接口测试(三)
三,接口用例的设计 个人感觉用例的设计才是重要的哈,网上查了一些资料总结了一下 1.业务流程测试 通过性验证: 1, 按照接口文档上的参数,正常传参,是否可以返回正确的结果 2, 是否满足前提条件,比 ...
- Python的set集合详解
Python 还包含了一个数据类型 -- set (集合).集合是一个无序不重复元素的集.基本功能包括关系测试和消除重复元素.集合对象还支持 union(联合),intersection(交),dif ...
- Google Chrome中的高性能网络-[译]《转载》
以下内容是"The Performance of Open Source Applications" (POSA)的草稿, 也是The Architecture of Open S ...
- web文件<async-supported>错误分析
<async-supported>true</async-supported> 出现 cvc-complex-type.2.4.a: Invalid content was f ...
- 利用sys.dm_db_index_physical_stats查看索引大小/碎片等信息
我们都知道,提高sql server的数据查询速度,最有效的方法,就是为表创建索引,而我们对数据表进行新增,删除,修改的时候,会产生索引碎片,索引碎片多了,对性能产生很大的影响,索引碎片越多对数据库查 ...
- SQLSERVER中的非工作时间不得插入数据的触发器的实现
create trigger trigger_nameon table_namefor insert,update,deleteasif (datepart(yy,getdate())%4=0 or ...
- linux 101 hacks 2date,grep,find
感觉挨个按着作者来的太蠢了,我还是放自己觉得不错的东西把 用特定格式显示当前时间 以下的方法可以用各种不同的格式来显示当前时间: $ date Thu Jan :: PST $ date --date ...