题目大意:给你n个点,求这n个点最多能组成多少个平行四边形。

题目思路:这道题卡时间,而且卡内存。你要尽可能的想办法优化。

平行四边形的判定定理:

  1. 两组对边分别平行的四边形是平行四边形(定义判定法);
  2. 一组对边平行且相等的四边形是平行四边形;
  3. 两组对边分别相等的四边形是平行四边形;
  4. 两组对角分别相等的四边形是平行四边形(两组对边平行判定);
  5. 对角线互相平分的四边形是平行四边形。

这道题用定理5判断。

记录每条边的中点坐标,如果两个边的中点坐标相同,证明这两条边为一个平行四边形的两条对角线。

#include<cstdio>
#include<stdio.h>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#define INF 0x3f3f3f
#define MAX 1000005 using namespace std; struct node
{
double midx,midy;
int x,y;
}Map[MAX]; int cmp(node A,node B)
{
if(A.midx != B.midx)
return A.midx > B.midx;
return A.midy > B.midy;
}
int main()
{
int T,n,i,j,num=,k;
long long sum,cnt,q;
scanf("%d",&T);
while(T--)
{
sum=;
cnt=;
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%d%d",&Map[i].x,&Map[i].y);
} for(i=;i<=n;i++)
{
for(j=i+;j<=n;j++)
{
Map[cnt].midx=(Map[i].x+Map[j].x)/2.0;
Map[cnt++].midy=(Map[i].y+Map[j].y)/2.0;
}
} sort(Map,Map+cnt,cmp);//为了后面的操作更省时,先排序 i=;
k=;
q=;
while(i < cnt)
{
if(Map[i].midx==Map[k].midx && Map[i].midy==Map[k].midy && k!=i)
{
sum+=q;//新增加的边可以与之前的每一条拥有相同中点的边形成一个新的平行四边形
q++;
}
else if(Map[i].midx!=Map[k].midx || Map[i].midy!=Map[k].midy)
{
k=i;
q=;
}
i++;
}
printf("Case %d: %lld\n",num++,sum);
}
return ;
}

LightOJ 1058 平行四边形的判断定理的更多相关文章

  1. LightOJ 1058 - Parallelogram Counting 几何思维

    http://www.lightoj.com/volume_showproblem.php?problem=1058 题意:给你顶点,问能够成多少个平行四边形. 思路:开始想使用长度来扫描有多少根,但 ...

  2. lightoj 1078【同余定理】

    题意: 给你一个n和一个数 digit ,问你最少需要多少个 digit 使得整除于n; 思路: 同余定理(a+b)%n=(a%n+b%n)%n; (m%n+m%n*10+m%n*100+m%n*10 ...

  3. LightOJ - 1058 - Parallelogram Counting(数学,计算几何)

    链接: https://vjudge.net/problem/LightOJ-1058 题意: There are n distinct points in the plane, given by t ...

  4. kuangbin 带你飞 数学基础

    模版整理: 晒素数 void init() { cas = ; ; i < MAXD ; i++) is_prime[i] = true; is_prime[] = is_prime[] = f ...

  5. Maths | 层次分析法(Analytic Hierarchy Process)

    目录 1. 概述 2. AHP算法 2.1. 建立层级 2.2. 构造 成对 比较 矩阵 2.3. 成对比较矩阵的 一致性检验 与 层次单排序 2.4. 层次总排序 参考: (中文)https://z ...

  6. POJ 1971 Parallelogram Counting

    题目链接: http://poj.org/problem?id=1971 题意: 二维空间给n个任意三点不共线的坐标,问这些点能够组成多少个不同的平行四边形. 题解: 使用的平行四边形的判断条件:对角 ...

  7. UESTC93 King's Sanctuary

    King's Sanctuary Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) ...

  8. 从矩阵(matrix)角度讨论PCA(Principal Component Analysis 主成分分析)、SVD(Singular Value Decomposition 奇异值分解)相关原理

    0. 引言 本文主要的目的在于讨论PAC降维和SVD特征提取原理,围绕这一主题,在文章的开头从涉及的相关矩阵原理切入,逐步深入讨论,希望能够学习这一领域问题的读者朋友有帮助. 这里推荐Mit的Gilb ...

  9. JAVA学习方法之——费曼学习法

    理查德·费曼 费曼简介 理查德·菲利普斯·费曼(Richard Phillips Feynman),出生于1918年5月11日,是美籍犹太裔物理学家,曾在1965年获得诺贝尔物理学奖,也被认为是继爱因 ...

随机推荐

  1. 设计新Xlator扩展GlusterFS[转]

    原文:http://www.linuxidc.com/Linux/2013-08/89105.htm 1. GlusterFS概述 GlusterFS是一个开源的分布式文件系统,具有强大的Scale- ...

  2. C#获取数字证书

    string Thumbprint = "C2489D912F247C187AA14B1291A6fB612281225D"; X509Store store = new X509 ...

  3. HDU 2952 Counting Sheep(DFS)

    题目链接 Problem Description A while ago I had trouble sleeping. I used to lie awake, staring at the cei ...

  4. 关于mysql中数据类型

    bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节. bigint ...

  5. Gentoo本地化设置--Locale系统介绍

    locale是什么? 一份Locale是一组信息的集合,大多数程序利用它来确定特定的国家和语言设置.这些locale以及它们包含的数据是系统库的一部分,可以在大多数系统中的/usr/share/loc ...

  6. web通知

    <html> <head> <title>桌面通知</title> <meta name="description" cont ...

  7. msmtp+mutt发送邮件报警

    1).yum 安装 msmtp+mutt yum install -y msmtp mutt 2).配置Muttrc信息 vim /etc/Muttrc set sendmail="/usr ...

  8. Ubuntu iptalbes 保存配置

     ubuntu 保存防火墙命令,iptables方式:1.iptables 配置好策略2.iptables-save > /etc/network/iptables.up.rules ,配置的策 ...

  9. UIKit继承结构和UIView.h文件详解

    @interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem> ...

  10. HDU 4329 MAP(stringstream的用法)

    这个题目有点绕,但是按着他的意思写不难模拟出来.本来是一场学弟们的训练赛,我这个学长在赛场上却WA了四次都没过,三条黑线就一直在我的脑袋上挂着... 赛后开始找原因,后来发现题目看错了,1/R中的R是 ...