zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 11 D. Number of Parallelograms 暴力

    D. Number of Parallelograms

    题目连接:

    http://www.codeforces.com/contest/660/problem/D

    Description

    You are given n points on a plane. All the points are distinct and no three of them lie on the same line. Find the number of parallelograms with the vertices at the given points.

    Input

    The first line of the input contains integer n (1 ≤ n ≤ 2000) — the number of points.

    Each of the next n lines contains two integers (xi, yi) (0 ≤ xi, yi ≤ 109) — the coordinates of the i-th point.

    Output

    Print the only integer c — the number of parallelograms with the vertices at the given points.

    Sample Input

    4
    0 1
    1 0
    1 1
    2 0

    Sample Output

    1

    Hint

    题意

    平面给你n个点,问你能够组成多少个平行四边形

    保证三点不共线,点都是不相同的

    题解:

    能够成平行四边形的两条边的东西,一定是两个相同的向量

    那么我们n^2把所有向量都计算出来就好了,注意得人为的去规定一下方向什么的,然后就完了。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 2005;
    map<pair<int,int>,int> H;
    pair<int,int>P[maxn];
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d%d",&P[i].first,&P[i].second);
        long long ans = 0;
        for(int i=1;i<=n;i++)
        {
            for(int j=i+1;j<=n;j++)
            {
                pair<int,int> T;
                T.first=P[i].first-P[j].first;
                T.second=P[i].second-P[j].second;
                if(T.first<0)T.first=-T.first,T.second=-T.second;
                else if(T.second<0&&T.first==0)T.second=-T.second;
                ans+=H[T];
                H[T]++;
            }
        }
        cout<<ans/2<<endl;
    }
  • 相关阅读:
    环境搭建:Vue环境搭建和项目初始化(windows)
    文件扩展关联命令
    关闭任务栏上右键的打开历史记录
    CDN基本原理和功能浅析
    制作支持UEFI启动的原装系统安装盘
    文件被占用如何查看
    BIOS和CMOS的区别
    PKI公钥基础设施简介
    网络安全通信https工作原理
    常见加密算法简介
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5373418.html
Copyright © 2011-2022 走看看