平行四边形数
来源:互联网 发布:js模拟按键 编辑:程序博客网 时间:2024/05/01 06:13
在一个平面内给定n个点,任意三个点不在同一条直线上,用这些点可以构成多少个平行四边形?一个点可以同时属于多个平行四边形。
Input
多组数据(<=10),处理到EOF。
每组数据第一行一个整数n(4<=n<=500)。接下来n行每行两个整数xi,yi(0<=xi,yi<=1e9),表示每个点的坐标。
Output
每组数据输出一个整数,表示用这些点能构成多少个平行四边形。
Sample Input
4
0 1
1 0
1 1
2 0
Sample Output
1
[分析]
大家可能一开始的思路是算斜率,但是应该算中点。
两个点构成一条线,两个线能确定一个中点。
如果两条线的中点是重合的,那么久能构成一个平行四边形!!!
这里分享一个究极大佬的代码。
代码风格十分飘逸简短。我看了好久才看懂
大意:输入一个点,对其之前输入的点凑对,构成一个中点(虽然他没除二,但中点*2也是唯一的,所以不影响),查询这个中点map的值然后将值加入ans,然后map值自加。
[代码]
#include<cstdio>#include<map>#include<cstring>using namespace std;int x[505], y[505];int main(){ int n; while(scanf("%d", &n)!=EOF) { int i, j, ans = 0; memset(x, 0, sizeof(x)); memset(y, 0, sizeof(y)); map<pair<int, int>, int>a; a.clear(); for (i = 0; i < n; i++) { scanf("%d%d", &x[i], &y[i]); for (j = 0; j < i; j++) { ans += a[make_pair(x[i] + x[j], y[i] + y[j])]++; } } printf("%d\n", ans); }}
阅读全文
0 0
- 平行四边形数
- 平行四边形数
- 平行四边形数
- 平行四边形数
- 平行四边形数
- 平行四边形数
- fzu 2231 平行四边形数
- 平行四边形数(fzoj_2231) 几何
- FZUOJ 2231 平行四边形数
- FZU 2231 平行四边形数
- FZU 2231 平行四边形数
- FZU 2231 平行四边形数
- Problem 2231 平行四边形数
- fzu-2231、 平行四边形数
- fzu2231平行四边形数
- Problem 2231 平行四边形数
- FZU Problem 2231 平行四边形数
- FZU2231 平行四边形数 计算几何
- ubuntu14.04更改源
- 堆排序
- HDU 6086 AC自动机+状压dp
- java对象创建详解
- 单例模式(大全)
- 平行四边形数
- debian之搜狗输入法的安装
- 插入排序法
- 二十三种设计模式之生成器模式
- 二叉搜索建树及相应的函数
- 【RabbitMQ】——整合spring
- RCNN学习笔记(4):fast rcnn
- [国家集训队2012]tree(陈立杰)
- 归并排序