LightOJ 1058 平行四边形的判断定理
题目大意:给你n个点,求这n个点最多能组成多少个平行四边形。
题目思路:这道题卡时间,而且卡内存。你要尽可能的想办法优化。
平行四边形的判定定理:
- 两组对边分别平行的四边形是平行四边形(定义判定法);
- 一组对边平行且相等的四边形是平行四边形;
- 两组对边分别相等的四边形是平行四边形;
- 两组对角分别相等的四边形是平行四边形(两组对边平行判定);
- 对角线互相平分的四边形是平行四边形。
这道题用定理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 平行四边形的判断定理的更多相关文章
- LightOJ 1058 - Parallelogram Counting 几何思维
http://www.lightoj.com/volume_showproblem.php?problem=1058 题意:给你顶点,问能够成多少个平行四边形. 思路:开始想使用长度来扫描有多少根,但 ...
- 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 ...
- LightOJ - 1058 - Parallelogram Counting(数学,计算几何)
链接: https://vjudge.net/problem/LightOJ-1058 题意: There are n distinct points in the plane, given by t ...
- kuangbin 带你飞 数学基础
模版整理: 晒素数 void init() { cas = ; ; i < MAXD ; i++) is_prime[i] = true; is_prime[] = is_prime[] = f ...
- Maths | 层次分析法(Analytic Hierarchy Process)
目录 1. 概述 2. AHP算法 2.1. 建立层级 2.2. 构造 成对 比较 矩阵 2.3. 成对比较矩阵的 一致性检验 与 层次单排序 2.4. 层次总排序 参考: (中文)https://z ...
- POJ 1971 Parallelogram Counting
题目链接: http://poj.org/problem?id=1971 题意: 二维空间给n个任意三点不共线的坐标,问这些点能够组成多少个不同的平行四边形. 题解: 使用的平行四边形的判断条件:对角 ...
- UESTC93 King's Sanctuary
King's Sanctuary Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) ...
- 从矩阵(matrix)角度讨论PCA(Principal Component Analysis 主成分分析)、SVD(Singular Value Decomposition 奇异值分解)相关原理
0. 引言 本文主要的目的在于讨论PAC降维和SVD特征提取原理,围绕这一主题,在文章的开头从涉及的相关矩阵原理切入,逐步深入讨论,希望能够学习这一领域问题的读者朋友有帮助. 这里推荐Mit的Gilb ...
- JAVA学习方法之——费曼学习法
理查德·费曼 费曼简介 理查德·菲利普斯·费曼(Richard Phillips Feynman),出生于1918年5月11日,是美籍犹太裔物理学家,曾在1965年获得诺贝尔物理学奖,也被认为是继爱因 ...
随机推荐
- deepin2014.1安装搜狗后却找不到图标及配置
点开Input Method Configration; 点左下角添加输入法; 将Only Ohow Current Language前 的勾去掉,选择出现的搜狗输入法. FYI.
- C语言实现用户输入
用户输入一个字符串然后回车表示结束.因为用户在输入的过程中长度是不确定的,所以要求自己使用的循环写的更好.在这里自己写了一个代码,效率不高,相对来说如果能模拟出C++中的vector向量可能会好一些. ...
- json解析的函数eval_r() 和 JSON.parse()
eval_r()解析的字符串格式是'({"data":"hello","num":"5"})' ...
- 二、ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)
阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...
- 7、Web应用程序中的安全向量 -- 使用Retail部署配置
该方法不需要胡乱地编辑各个配置设置,而是利用了ASP.NET特性:Retail部署配置. 部署配置是服务器的machine.config文件(在%windir%\Microsoft.NET\Frame ...
- JVM基础(4)-编译
一.编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: (其中绿色的模块可以选择性实现.) 很容易看 ...
- Java comparable 和 comparator
一.comparator 接口继承 public class ComparatorTest { /** * @param args */ public static void main(String[ ...
- 富文本ckediter
##<link rel='stylesheet' href='/css/index.css' /> <script type="text/javascript" ...
- Linux RCU机制详解
关于rcu的几点声明: 1:RCU使用在读者多而写者少的情况.RCU和读写锁相似.但RCU的读者占锁没有任何的系统开销.写者与写写者之间必须要保持同步,且写者必须要等它之前的读者全部都退出之后才能释放 ...
- 十三、oracle 数据字典和动态性能视图
一.概念数据字典是oracle数据库中最重要的组成部分,它提供了数据库的一些系统信息.动态性能视图记载了例程启动后的相关信息. 二.数据字典1).数据字典记录了数据库的系统信息,它是只读表和视图的集合 ...