FZU 2231 平行四边形数 (几何 想法)
2016-06-02 14:20
363 查看
Problem 2231 平行四边形数
Accept: 104 Submit: 340
在一个平面内给定n个点,任意三个点不在同一条直线上,用这些点可以构成多少个平行四边形?一个点可以同时属于多个平行四边形。
多组数据(<=10),处理到EOF。
每组数据第一行一个整数n(4<=n<=500)。接下来n行每行两个整数xi,yi(0<=xi,yi<=1e9),表示每个点的坐标。
每组数据输出一个整数,表示用这些点能构成多少个平行四边形。
4
0 1
1 0
1 1
2 0
1
福州大学第十三届程序设计竞赛
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2231
题目分析:由于不会有三点共线,因此我们直接记录任意两点的中点,根据平行四边形对角线互相平分,那么对于一个为n个点对中点的点其能构成的平行四边形个数为C(n,2),因此把所有点能够成的个数累加即可
Accept: 104 Submit: 340
Time Limit: 2000 mSec Memory Limit : 32768 KB
Problem Description
在一个平面内给定n个点,任意三个点不在同一条直线上,用这些点可以构成多少个平行四边形?一个点可以同时属于多个平行四边形。
Input
多组数据(<=10),处理到EOF。每组数据第一行一个整数n(4<=n<=500)。接下来n行每行两个整数xi,yi(0<=xi,yi<=1e9),表示每个点的坐标。
Output
每组数据输出一个整数,表示用这些点能构成多少个平行四边形。
Sample Input
40 1
1 0
1 1
2 0
Sample Output
1
Source
福州大学第十三届程序设计竞赛题目链接:http://acm.fzu.edu.cn/problem.php?pid=2231
题目分析:由于不会有三点共线,因此我们直接记录任意两点的中点,根据平行四边形对角线互相平分,那么对于一个为n个点对中点的点其能构成的平行四边形个数为C(n,2),因此把所有点能够成的个数累加即可
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int const MAX = 505; struct LINE { int x, y; }l[MAX], mid[MAX * MAX]; bool cmp(LINE a, LINE b) { if(a.x == b.x) return a.y < b.y; return a.x < b.x; } int main() { int n; while(scanf("%d", &n) != EOF) { for(int i = 0; i < n; i++) scanf("%d %d", &l[i].x, &l[i].y); int cnt = 0; for(int i = 0; i < n; i++) { for(int j = i + 1; j < n; j++) { mid[cnt].x = l[i].x + l[j].x; mid[cnt ++].y = l[i].y + l[j].y; } } sort(mid, mid + cnt, cmp); int p = 1, ans = 0; for(int i = 1; i < cnt; i++) { if(mid[i].x == mid[i - 1].x && mid[i].y == mid[i - 1].y) p ++; else { ans += p * (p - 1) / 2; p = 1; } } printf("%d\n", ans); } }
相关文章推荐
- Android代码实现状态选择器
- 指针和引用的区别
- NuGet安装和使用
- 【linux】压缩和解压缩
- jquery获取和设置值
- C/C++程序员必须熟练应用的开源项目
- 参数嗅探(Parameter Sniffing)(1/2)
- iOS中旋转加载动画的实现
- CSS基础学习笔记
- 计算机网络分类
- ubuntu使用meld/beyond compare 做git的diff工具
- 生产者消费者模式
- Dashgo D1使用注意说明
- Qt5 窗口关闭信号的响应~
- mipmap 目录和drawable 目录有什么区别
- JAVA程序员一定知道的优秀第三方库(2016版)
- 字符编码笔记(本文系转载)
- 重新定位svn地址的方法(windows和linux),svn switch(sw)的帮助信息
- easyui
- android-PullRefreshLayout——Android下拉刷新布局组件