• POJ 1971 Parallelogram Counting


     题目大意:

    给定1000个点,求有多少组4个点可以形成平行四边形

    这里可以找到一个特别关键的点在于如果能形成平行四边形,2个点的中点必然相交

    那么只要将所有点的中点都计算出来,然后排个序计算出现的次数即可,这里算中点可能会出现小数,可以直接不除以2,这样是中点的2倍也没问题

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 #include <string>
     5 #include <algorithm>
     6 #include <vector>
     7 #include <map>
     8 #include <stack>
     9 #include <iomanip>
    10 using namespace std;
    11 #define N 1005
    12 #define MOD 10007
    13 #define ll long long
    14 
    15 struct Point{
    16     int x , y;
    17     bool operator<(const Point &m) const{
    18         return x<m.x || (x==m.x&&y<m.y);
    19     }
    20     bool operator==(const Point &m) const{
    21         return x==m.x&&y==m.y;
    22     }
    23 }p[N] , tmp[N*N];
    24 
    25 map<Point , int> m;
    26 
    27 int solve(int k)
    28 {
    29     sort(tmp , tmp+k);
    30     int ret = 0 , cur=1;
    31     for(int i=1 ; i<k ; i++){
    32         if(!(tmp[i]==tmp[i-1])){
    33             ret += cur*(cur-1)/2;
    34             cur = 1;
    35         }
    36         else cur++;
    37     }
    38     return ret;
    39 }
    40 
    41 int main()
    42 {
    43     #ifndef ONLINE_JUDGE
    44         freopen("a.in" , "r" , stdin);
    45     #endif // ONLINE_JUDGE
    46     int T;
    47     scanf("%d" , &T);
    48     while(T--)
    49     {
    50         int n;
    51         scanf("%d" , &n);
    52         for(int i=0 ; i<n ; i++)
    53             scanf("%d%d" , &p[i].x , &p[i].y);
    54         int k=0;
    55         for(int i=0 ; i<n ; i++){
    56             for(int j=i+1 ; j<n ; j++){
    57                 Point t;
    58                 t.x = p[i].x+p[j].x;
    59                 t.y = p[i].y+p[j].y;
    60                 tmp[k++] = t;
    61             }
    62         }
    63         printf("%d
    " , solve(k));
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    hdu 1875 Krustal最小生成树
    寒假学习PID和latex随笔2013/2/10
    HDU:今年暑假不AC
    HDU:七夕节
    寒假规划
    HDU:开门人和关门人
    HDU:cake
    HDU:最小公倍数
    HDU:Who's in the Middle
    Latex 第一个程序 效果
  • 原文地址:https://www.cnblogs.com/CSU3901130321/p/4544300.html
Copyright © 2020-2023  润新知