CodeForces 660D Number of Parallelograms(水题)

来源:互联网 发布:2002文泰刻绘软件下载 编辑:程序博客网 时间:2024/06/04 23:20

题意:给出平面上n个点,问能组成多少平行四边形。

思路:先将能组成的线段求出来,然后对于线段按照端点横纵坐标之差排序,最后计数。

#include<bits/stdc++.h>#define eps 1e-6#define LL long long#define pii pair<int, int>#define pb push_back#define mp make_pair//#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;const int MAXN = 2010;//const int INF = 0x3f3f3f3f;int n;struct Node{int x, y;bool operator < (const Node& A) const {return x == A.x ? y < A.y : x < A.x;}Node(int _x=0, int _y=0) : x(_x), y(_y) {}};Node l[MAXN*MAXN], p[MAXN];multiset<Node> s;int main(){    //freopen("input.txt", "r", stdin);scanf("%d", &n);for (int i = 1; i <= n; i++)scanf("%d%d", &p[i].x, &p[i].y);sort(p+1, p+n+1);int cnt = 0;for (int i = 1; i <= n; i++) for (int j = i+1; j <= n; j++) l[++cnt] = Node(p[j].x-p[i].x, p[j].y-p[i].y);LL ans = 0;for (int i = 1; i <= cnt; i++) {ans += s.count(l[i]);s.insert(l[i]);}cout << ans/2 << endl;    return 0;}

0 0
原创粉丝点击