• CodeForces 459A Pashmak and Garden(水~几何-给两点求两点组成正方形)


    题目链接:http://codeforces.com/problemset/problem/459/A

    题目大意:

      给出两个点(在坐标轴中),求另外两个点从而构成一个正方形,该正方形与坐标轴平行。

      如果给的点构不成与坐标轴平行的正方形,则输出 -1.

      两点范围: x1, y1, x2, y2 ( - 100 ≤ x1, y1, x2, y2 ≤ 100) 。所求两点范围: x3, y3, x4, y4 ( - 1000 ≤ x3, y3, x4, y4 ≤ 1000).

    解题思路:

      给出两个点,那么这两个有三种关系,

      1. 两个点横坐标相等。  2.两个点纵坐标相等。 3.两个点对角。在坐标找“相对位置”的点即可。

      if(x1==x2)
        printf("%d %d %d %d
    ", x1-abs(y1-y2),y1,x2-abs(y1-y2),y2);
    上两行代码解释:
       如果x1==x2,则两个点在同一列,求剩余两个点的位置,则剩余两个点的y可以从已知的两个点中得出【不明白可以在纸上画画】,则求两个点的“相对给出点的” x 的位置.
    先求 x3 距离 x1(x1 对应 x3) 的绝对距离,然后让 x1-绝对距离(也可以是 x1+绝对距离),即可得到相对于x1的 x3 的位置,则第三个点的位置就有了,x3,y3(y3=y1).
    同样在求x4,y4即可。
      y1==y2 同样的思路不在解释。
      如果给出的两个点为对角【if(abs(y1-y2)==abs(x1-x2))条件满足可以构成正方形】,则直接可以得出剩余两个点的位置【不明白纸上画画】。

    AC Code:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     int x1,x2,y1,y2;
     6     while(scanf("%d%d%d%d",&x1,&y1,&x2,&y2)!=EOF)
     7     {
     8         if(x1==x2)
     9             printf("%d %d %d %d
    ", x1-abs(y1-y2),y1,x2-abs(y1-y2),y2);
    10         else if(y1==y2)
    11             printf("%d %d %d %d
    ",x1,y1-abs(x1-x2),x2,y2-abs(x1-x2));
    12         else if(abs(x1-x2)==abs(y1-y2))
    13             printf("%d %d %d %d
    ",x1,y2,x2,y1);
    14         else
    15             printf("-1
    ");
    16     }
    17     return 0;
    18 }
  • 相关阅读:
    shell加密为二进制可执行文件
    lua自写限制并发访问模块
    centos虚拟机中挂新硬盘
    lua文件修改为二进制文件
    常用一些命令方法
    常用问题处理方法
    CVE-2010-3333
    Kernel Stack Overflow(转)
    NULL Pointer Dereference(转)
    Linux内核漏洞利用-环境配置(转)
  • 原文地址:https://www.cnblogs.com/A--Q/p/5945719.html
Copyright © 2020-2023  润新知