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
  • 相关阅读:
    MVC与MVVM
    js正则删除字符串中的部分内容(支持变量和特殊符号)
    小程序之rpx适配方案
    表单元素内容禁用拼写检查
    vue组件实例的生命周期
    Windows下生成目录结构树命令
    DRF之解析器源码解析
    restful规范快速记忆
    python报错之OSError
    xlrd、xlwt
  • 原文地址:https://www.cnblogs.com/violet-acmer/p/10224165.html
Copyright © 2011-2022 走看看