zoukankan      html  css  js  c++  java
  • 【2017 Multi-University Training Contest

    Link:

    Description

    给你n个点整数点;
    问你这n个点,能够组成多少个正多边形

    Solution

    整点只能构成正四边形.
    则先把所有的边预处理出来;
    枚举每某两条边为对角线的情况;
    看看这两条对角线能否组成一个正方形;
    可以的话,递增答案.

    NumberOf WA

    1

    Reviw

    (排序的时候边的数目和点的弄混了)

    Code

    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N = 500;
    
    struct abc{
        int x[2],y[2],dis;
    };
    
    abc bian[N*N+100];
    int x[N+10],y[N+10];
    int n,tot;
    
    int sqr(int x){
        return x*x;
    }
    
    int get_dis(int i,int j){
        return sqr(x[i]-x[j])+sqr(y[i]-y[j]);
    }
    
    bool cmp(abc a,abc b){
        return a.dis < b.dis;
    }
    
    main(){
        while (~scanf("%lld",&n)){
            int ans = 0;
            tot = 0;
            for (int i = 1;i <= n;i++)
                scanf("%lld%lld",&x[i],&y[i]);
            for (int i = 1;i <= n-1;i++)
                for (int j = i+1;j <= n;j++){
                    tot++;
                    bian[tot].x[0] = x[i],bian[tot].y[0] = y[i];
                    bian[tot].x[1] = x[j],bian[tot].y[1] = y[j];
                    bian[tot].dis = get_dis(i,j);
                }
            sort(bian+1,bian+1+tot,cmp);
            for (int i = 1;i <= tot;i++){
                int j = i;
                while (j+1 <= tot && bian[j+1].dis == bian[i].dis) j++;
                for (int k = i;k <= j-1;k++)
                    for (int l = k+1;l <= j;l++){
                        int x1 = bian[k].x[0],y1 = bian[k].y[0];
                        int x2 = bian[k].x[1],y2 = bian[k].y[1];
                        int x3 = bian[l].x[0],y3 = bian[l].y[0];
                        int x4 = bian[l].x[1],y4 = bian[l].y[1];
                        if ( (x1+x2==x3+x4) && (y1+y2 == y3+y4) ){
                            if ( (x2-x1)*(x4-x3) + (y2-y1)*(y4-y3) == 0){
                                ans++;
                            }
                        }
                    }
                i = j;
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    第二阶段冲刺10
    第二阶段冲刺9
    第二阶段冲刺8
    (转载)关于数组的几个面试题
    关于静态变量
    linux进程地址空间详解(转载)
    单例模式,多种实现方式JAVA
    最佳线程数
    python学习
    svn设置
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626155.html
Copyright © 2011-2022 走看看