zoukankan      html  css  js  c++  java
  • CodeForces

    传送门

    题意:

      给出三个点的坐标,初始,这三个点可以构成一个三角形。

      如果初始坐标可以构成直角三角形,输出"RIGNT"。

      如果某个点的 x或y 坐标移动一个单位后可以组成直角三角形,输出"ALMOST"。

      如果不能构成直角三角形,输出"NEITHER"。

    题解:

      我的思路:

        如何判断是否含有直角呢--向量。

        a,b,c 三点可以构成三条向量 ab,ab,bc(不考虑方向),如果存在某两条向量的点乘积为0,那么这两个向量垂直。

    AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 #define P pair<int ,int >
     5 
     6 struct Node
     7 {
     8     int x,y;
     9 }a[3];
    10 P p[3];
    11 
    12 void updata()//更新向量
    13 {
    14     for(int i=0;i < 3;++i)
    15     {
    16         p[i].first=a[(i+1)%3].x-a[i].x;
    17         p[i].second=a[(i+1)%3].y-a[i].y;
    18     }
    19 }
    20 bool isSat()//判断是否有重合的两点
    21 {
    22     for(int i=0;i < 3;++i)
    23         if(p[i].first == 0 && p[i].second == 0)
    24             return false;
    25     return true;
    26 }
    27 int product(int i,int j)//点乘积
    28 {
    29     return p[i].first*p[j].first+p[i].second*p[j].second;
    30 }
    31 bool Check()
    32 {
    33     updata();
    34     if(!isSat())
    35         return false;
    36     if(!product(0,1) || !product(1,2) || !product(0,2))
    37         return true;
    38     return false;
    39 }
    40 char *Solve()
    41 {
    42     if(Check())
    43         return "RIGHT";
    44     for(int i=0;i < 3;++i)
    45     {
    46         //i点的x右移一个单位,以下同理
    47         a[i].x++;
    48         if(Check())
    49             return "ALMOST";
    50         a[i].x--;
    51 
    52         a[i].x--;
    53         if(Check())
    54             return "ALMOST";
    55         a[i].x++;
    56 
    57         a[i].y++;
    58         if(Check())
    59             return "ALMOST";
    60         a[i].y--;
    61 
    62         a[i].y--;
    63         if(Check())
    64             return "ALMOST";
    65         a[i].y++;
    66     }
    67     return "NEITHER";
    68 }
    69 int main()
    70 {
    71     for(int i=0;i < 3;++i)
    72         scanf("%d%d",&a[i].x,&a[i].y);
    73     printf("%s
    ",Solve());
    74     return 0;
    75 }
    View Code
  • 相关阅读:
    动态规划01背包
    动态规划矩阵连乘
    分治法归并排序
    动态规划最长公共子序列
    贪心算法活动安排
    分治法二分查找
    vue 可拖拽可缩放 vuedraggableresizable 组件常用总结
    rifilter in python discussed in 3delight
    3delight linear work flow
    pixar stereo rendering doc
  • 原文地址:https://www.cnblogs.com/violet-acmer/p/10224165.html
Copyright © 2011-2022 走看看