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年获得诺贝尔物理学奖,也被认为是继爱因 ...
随机推荐
- Apache httpd.conf配置详解
常用配置指令说明 1. ServerRoot:服务器的基础目录,一般来说它将包含conf/和logs/子目录,其它配置文件的相对路径即基于此目录.默认为安装目录,不需更改. 语法:ServerRoot ...
- HDU 2064 汉诺塔III(递归)
题目链接 Problem Description 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘 ...
- hdu 1407 测试你是否和LTC水平一样高
Description 大家提到LTC都佩服的不行,不过,如果竞赛只有这一个题目,我敢保证你和他绝对在一个水平线上! 你的任务是: 计算方程x^2+y^2+z^2= num的一个正整数解. Inpu ...
- MySQL 修改 root 密码命令
安装好 MySQL 并成功启动 MySQL 服务后,可以通过以下方法修改root密码: ①用 mysqladmin.exe 操作.指令如下: cd C:\Program Files\MySQL Ser ...
- 五指cms模版基础
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java创建对象的4种方式?
[Java创建对象的4种方式?] 1)通过new语句实例化一个对象 2)通过反射机制创建对象 3)通过clone()方法创建一个对象 (复制) 4)通过反序列化方式创建对象
- gridControl 中CellValueChanged,ShowingEditor,CustomDrawCell的用法
private void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventA ...
- hadoop 及hbase zookeeper 经常出现问题
往往是以下几个 1/ 各节点时间不统一(写shell文件统一时间) 2/配置文件 /etc/hosts文件中ip地址配置错误(更新ip) 3/断网后重启机器 ip地址被修改(更新配置文件中的ip)
- Hadoop上的中文分词与词频统计实践 (有待学习 http://www.cnblogs.com/jiejue/archive/2012/12/16/2820788.html)
解决问题的方案 Hadoop上的中文分词与词频统计实践 首先来推荐相关材料:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-c ...
- HDU 5352 MZL's City
最小费用最大流,因为要控制字典序,网络流控制不好了...一直WA,所以用了费用流,时间早的费用大,时间晚的费用少. 构图: 建立一个超级源点和超级汇点.超级源点连向1操作,容量为K,费用为COST,然 ...