FZU-2270 Two Triangles(两个三角形全等)
所以首先要是三角形即三点不能共线,其次要全等,即三条边对应相等,最后判断是否对称,如果对称无论如何旋转都无法重合
所以利用叉积选好对应边,如果两个叉积互为相反数,则说明对称否则可以重合,这里注意一种特殊情况,等边三角形要提前判断,因为等边三角形不需要判断叉积只要全等一定可以通过旋转平移重合
直接暴力枚举六个不同的点即可
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstring>
#include<iostream>
#include<sstream>
#include<cmath>
#define LL long long
#define INF 0x3f3f3f3f
#define eps 1e-6
using namespace std;
int n;
int T;
int ans;
struct node
{
int x,y;
node (){};
node(int x,int y):x(x),y(y){};
node operator - (node p)
{
return node(x-p.x,y-p.y);
}
int operator *(node p){
return x*p.y-y*p.x;
}
}E[15];
int vis[11][11][11][11][11][11];
double dis(node a,node b)
{
return sqrt((a.x-b.x)*(a.x-b.x)*1.0+(a.y-b.y)*(a.y-b.y)*1.0);
}
int check(int a,int b,int c,int d,int e,int f){
int a1[3] = {a,b,c};
int a2[3] = {d,e,f};
sort(a1,a1+3);
sort(a2,a2+3);
if(vis[a1[0]][a1[1]][a1[2]][a2[0]][a2[1]][a2[2]]==0){
vis[a1[0]][a1[1]][a1[2]][a2[0]][a2[1]][a2[2]]=1;
return 1;
}
else
return 0;
}
int dis2(node a,node b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int main()
{
scanf("%d",&T);
int kase = 1;
while(T--){
ans = 0;
scanf("%d",&n);
for(int i = 0;i<n;i++){
scanf("%d%d",&E[i].x,&E[i].y);
}
memset(vis,0,sizeof(vis));
for(int i = 0;i<n;i++){
for(int j = 0;j<n;j++){
if(i==j)
continue;
for(int k = 0;k<n;k++){
if(i==k||j==k)
continue;
for(int m = 0;m<n;m++){
if(fabs(dis(E[i],E[k])-dis(E[j],E[m]))>eps)
continue;
if(m==i||m==j||m==k)
continue;
for(int l = 0;l<n;l++)
{
if(l==i||l==j||l==k||l==m)
continue;
for(int o = 0;o<n;o++){
if(fabs(dis(E[i],E[l])-dis(E[j],E[o]))>eps||fabs(dis(E[k],E[l])-dis(E[m],E[o]))>eps)
continue; if(o==i||o==j||o==k||o==m||o==l)
continue;
if((((E[i]-E[k])*(E[i]-E[l]))*((E[j]-E[m])*(E[j]-E[o])))<0)
continue; double len1[3];
double len2[3]; len1[0] = dis(E[i],E[k]);
len1[1] = dis(E[i],E[l]);
len1[2] = dis(E[k],E[l]);
len2[0] = dis(E[j],E[m]);
len2[1] = dis(E[j],E[o]);
len2[2] = dis(E[m],E[o]);
sort(len1,len1+3);
sort(len2,len2+3);
if(fabs(len1[2]-len1[0]-len1[1])<=eps)
continue;
if(fabs(len2[2]-len2[0]-len2[1])<=eps)
continue;
// if(!check(i,k,l,j,m,o))
// continue;
ans++;
}
}
}
}
}
}
printf("Case %d: %d\n",kase++,ans/6);
}
}
FZU-2270 Two Triangles(两个三角形全等)的更多相关文章
- 【计算几何】FZU Problem 2270 Two Triangles
http://acm.fzu.edu.cn/problem.php?pid=2270 [题意] 给定6到10个点,从中选出6个不同的点组成两个三角形,使其中一个三角形可以通过另一个三角形平移和旋转得到 ...
- CSS+DIV两栏式全屏布局
在网上找了很久,发现大部分都是固定宽度设置两栏,全屏情况下的布局很少.最后终于完成了,写出来备查,也供大家参考. <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- [fzu 2273]判断两个三角形的位置关系
首先判断是否相交,就是枚举3*3对边的相交关系. 如果不相交,判断包含还是相离,就是判断点在三角形内还是三角形外.两边各判断一次. //http://acm.fzu.edu.cn/problem.ph ...
- Android中两种设置全屏的方法
设置全屏的两种方法: 第一种:在配置文件里面配置: <?xml version="1.0" encoding="utf-8"?><manife ...
- Android中两种设置全屏或者无标题的方法
在开发中我们经常需要把我们的应用设置为全屏或者不想要title, 这里是有两种方法的,一种是在代码中设置,另一种方法是在配置文件里改: 一.在代码中设置: package jason.tutor; i ...
- Spring Boot 整合 Shiro ,两种方式全总结!
在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro. 今天松哥就来和大家聊聊 Spring Boot ...
- OpenGL红宝书第一个例子:绘制两个三角形
1. 环境配置 在这里不在做环境配置的说明,因为网上可以找到很多类似的教程,如果有需要可以@我,我也希望能帮到大家,其它的不说了,先上我的代码 2. 第一个程序代码 创建LoadShader.h #p ...
- Codestorm:Counting Triangles 查各种三角形的个数
题目链接:https://www.hackerrank.com/contests/codestorm/challenges/ilia 这周六玩了一天的Codestorm,这个题目是真的很好玩,无奈只做 ...
- [itint5]两数积全为1
http://www.itint5.com/oj/#18 这一题,首先如果直接去算的话,很容易就超出int或者long的表示范围了.那么要利用%的性质,(num * 10 + 1) % a = 10 ...
随机推荐
- Caliburn Micro Binding KeyDown Event
<TextBox x:Name="MyTextBox" TextAlignment="Left" FontSize="10" Widt ...
- 浅谈 css 之 position用法
在 css中, position 属性有四个值可用: static(默认值).absolute.relative.fixed. relative:相对定位(相对于自身进行在常规流中的位置进行定位,保留 ...
- 深入理解synchronize
本文参考引用,本人整理个人理解.地址点击 1.实现原理 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性. 下面是一些 ...
- (转\整)UE4游戏优化 多人大地型游戏的优化(四)内存的优化
施主分享随缘,评论随心,@author:白袍小道,当苦无妨 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题 ...
- java实现最大堆
优先队列 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有最高级先出 (first in, ...
- web知识清单
声名随笔中的实例链接到另一个博客是我本人的另一个博客号 模块一:HTML 1.html是什么: hyperText markup language超文本标记语言 超文本:比文本更丰富的内容 所有的浏览 ...
- KMP与循环节相关题目
HDU 3746 Cyclic Nacklace ( KMP求最小循环节 ) len - nextval[len]即为最小循环节长度. #include <cstdio> #include ...
- HDU 4731 Minimum palindrome (找规律)
M=1:aaaaaaaa…… M=2:DFS+manacher, 暴出N=1~25的最优解,找规律.N<=8的时候直接输出,N>8时,头两个字母一定是aa,剩下的以aababb循环,最后剩 ...
- Servlet 中 RequestDispacher 请求与分发
RequestDispacher 请求与分发使用HttpServletRequest的getRequestDispatcher()方法取得 Login.java页面 package control; ...
- min_free_kbytes是内存最安全值的阈值,然后这个值是怎么影响到系统内存回收的呢?
min_free_kbytes 内存域水印值:min_free_kbytes 当不设置的时候:sqrt(16M)=4k 4k*4 = 16k 设置内存水印值的函数是: 6792 /* 6793 * I ...