题目大意:给你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. SignalR的坑爹细节

    好吧!SignalR的确是好用,照着官网的例子自己敲了一遍,死活得不到效果... 检查了半天,抱着试一试的心态吧原来在服务端大写开头的Hub类和大写开头的方法在客户端调用的时候,全部改成小写,一刷新, ...

  2. 我所使用的Linux软件集合

    自从2003-2004春节之际初次尝试使用Linux以来,至今已十年有余了.尤其是整个博士研究期间,坚持在Linux下开展学习与研究工作,前前后后试用了不少桌面环境.窗口管理器.终端程序以及其他应用软 ...

  3. LeetCode OJ 85. Maximal Rectangle

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and ...

  4. Vultr\DigitalOcean\Linode速度最快的vps机房推荐

    对大陆用户来说,香港.新加坡.韩国.台湾.日本,地理位置近,机房速度快.香港地区带宽成本太高,小水管跑不起来,没有性价比.韩国机房带宽充足,但成本也高.新加坡机房量少,像oneasiahost经常无法 ...

  5. Gentoo安装详解(四)-- 声卡设置

    硬件检测 To choose the right driver, first detect the used audio controller. You can use lspci for this ...

  6. chapter 12_1 数据文件

    Lua的一个重要特性,就是可以作为配置文件,利用到table构造式来定义一种文件格式. 只需要在写数据时做一点额外的工作,读取数据就会变得相当容易.也就是将数据作为Lua代码输出. 当运行这些代码时, ...

  7. strace -o /tmp/dhc$$ dhclient -d eth2

    http://askubuntu.com/questions/5187/why-is-dhclient-saying-siocsifaddr-permission-denied ip link add ...

  8. 3. JavaScript 数据类型

    1. 主要类型 字符串(String).数字(Number).布尔(Boolean).数组(Array).对象(Object).空(Null).未定义(Undefined). JavaScript 拥 ...

  9. Android jni编辑.so库

    引自:http://www.cnblogs.com/sevenyuan/p/4202759.html 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.ja ...

  10. 用Jedis获取redis连接(集群和非集群状态下)

    第一:非集群状态下 非集群状态下用Jedis获取redis连接,得到Jedis对象即可,一共有两种: 1.利用Jedis构造器,仅限用于测试,在实际项目中肯定是用JedisPool. Jedis(St ...