• Squares 四边形数量,求坐标很重要


    Problem Description
    A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that rotating about its centre by 90 degrees gives the same polygon. It is not the only polygon with the latter property, however, as a regular octagon also has this property. 

    So we all know what a square looks like, but can we find all possible squares that can be formed from a set of stars in a night sky? To make the problem easier, we will assume that the night sky is a 2-dimensional plane, and each star is specified by its x and y coordinates. 
     
    Input
    The input consists of a number of test cases. Each test case starts with the integer n (1 <= n <= 1000) indicating the number of points to follow. Each of the next n lines specify the x and y coordinates (two integers) of each point. You may assume that the points are distinct and the magnitudes of the coordinates are less than 20000. The input is terminated when n = 0.
     
    Output
    For each test case, print on a line the number of squares one can form from the given stars.
     
    Sample Input
    4 1 0 0 1 1 1 0 0 9 0 0 1 0 2 0 0 2 1 2 2 2 0 1 1 1 2 1 4 -2 5 3 7 0 0 5 2 0
     
    Sample Output
    1 6 1
    ***************************************************************************************************************************
    记着标记数组要用boolean类型
    ***************************************************************************************************************************
     1 #include<iostream>
     2 #include<string>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<queue>
     6 #include<cstdio>
     7 using namespace std;
     8 int x[1010],y[1010];
     9 bool fs[5000][5000];//此处要定义成bool类型的,否则超内存
    10 int a,b,c,i,j,sum,n;
    11 int f(int a,int b)
    12 {
    13       if(fs[a+2500][b+2500])
    14          return 1;
    15      return 0;
    16 }
    17 
    18 int main()
    19 {
    20     int x1,y1,x2,y2,x3,y3,x4,y4;
    21     int a,b,i,j,sum,n;
    22     while(scanf("%d",&n)&&n)
    23     {
    24         sum=0;
    25         memset(fs,0,sizeof(fs));
    26         for(i=0;i<n;i++)
    27         {
    28             scanf("%d %d",&a,&b);
    29             x[i]=a;
    30             y[i]=b;
    31             fs[a+2500][b+2500]=1;
    32         }
    33         for(i=0;i<n;i++)
    34         {
    35              x1=x[i];
    36              y1=y[i];
    37             for(j=0;j<i;j++)
    38             {
    39                  x2=x[j];
    40                  y2=y[j];
    41                  x3,y3,x4,y4;
    42                 x3=x1+(y1-y2);//这个公式推推就出来啦
    43                 y3=y1-(x1-x2);
    44                 x4=x2+(y1-y2);
    45                 y4=y2-(x1-x2);
    46                 if(f(x3,y3)&&f(x4,y4))
    47                   sum++;
    48                 x3=x1-(y1-y2);
    49                 y3=y1+(x1-x2);
    50                 x4=x2-(y1-y2);
    51                 y4=y2+(x1-x2);
    52                 if(f(x3,y3)&&f(x4,y4))
    53                   sum++;
    54             }
    55         }
    56         printf("%d
    ",sum/4);//注意此处要除以4,
    57 
    58     }
    59 }
    View Code
  • 相关阅读:
    android view生命周期
    ViewPager 滑动页(四)
    android 中如何获取camera当前状态
    Android LayoutInflater原理分析,带你一步步深入了解View(一)
    仿Twitter登陆移动背景效果
    Android应用性能优化之使用SQLiteStatement优化SQLite操作
    GreenDao官方文档翻译(下)
    高级IO
    linux信号
    LINUX进程
  • 原文地址:https://www.cnblogs.com/sdau--codeants/p/3389384.html
Copyright © 2020-2023  润新知