• luogu1355 神秘大三角


    题解:

    计算几何入门题

    按逆时针方向访问三角形的边

    然后作叉积判断点是否在边的顺时针方向

    叉积和点积都有分配率 但不满足结合律

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define rint register int
    #define IL inline
    #define rep(i,h,t) for (int i=h;i<=t;i++)
    #define dep(i,t,h) for (int i=t;i>=h;i--)
    #define me(x) memset(x,0,sizeof(x))
    #define mid ((h+t)>>1)
    namespace IO{
      char ss[1<<24],*A=ss,*B=ss;
      IL char gc()
      {
        return A==B&&(B=(A=ss)+fread(ss,1,1<<24,stdin),A==B)?EOF:*A++;
      }
      template<class T>void read(T &x)
      {
        rint f=1,c; while (c=gc(),c<48||c>57) if (c=='-') f=-1; x=(c^48);
        while (c=gc(),c>47&&c<58) x=(x<<3)+(x<<1)+(c^48); x*=f; 
      }
    };
    using namespace IO;
    struct Point{
      int x,y;
      Point(){};
      Point(int x1,int y1)
      {
        x=x1,y=y1;
      }
      Point operator +(const Point b)const
      {
        return Point(x+b.x,y+b.y);
      }
      Point operator -(const Point b)const
      {
        return Point(x-b.x,y-b.y);
      }
      int operator *(const Point b)const
      {
        return b.x*x+b.y*y; 
      }
      int operator ^(const Point b)const
      {
        return x*b.y-y*b.x;
      }
      bool operator ==(const Point b)const
      {
        if (y==b.y&&x==b.x) return(1); else return(0);
      }
    };
    struct Line{
      Point x,y;
      Line() {};
      Line(Point x1,Point y1)
      {
        x=x1,y=y1;
      }
    };
    int main()
    {
      int x1,y1,x2,y2,x3,y3,x,y;
      Point p1,p2,p3,p;
      read(x1); read(y1); p1=Point(x1,y1); 
      read(x2); read(y2); p2=Point(x2,y2);
      read(x3); read(y3); p3=Point(x3,y3);
      read(x); read(y); p=Point(x,y); 
      if (((p3-p1)^(p2-p1))>0) swap(p3,p1); 
      if (p==p1||p==p2||p==p3)
      {
        cout<<4<<endl;
        exit(0);
      }
      int tt=1;
      if (((p3-p1)^(p-p1))>0) tt=2;
      if (((p3-p1)^(p-p1))==0) tt=3;
      if (((p1-p2)^(p-p2))>0) tt=2;
      if (((p1-p2)^(p-p2))==0) tt=3;
      if (((p2-p3)^(p-p3))>0) tt=2;
      if (((p2-p3)^(p-p3))==0) tt=3; 
      cout<<tt<<endl;
      return 0; 
    }
  • 相关阅读:
    十大经典排序算法最强总结(含Java、Python码实现)
    数据库查询优化的12种方式
    开发环境、测试环境、预发布环境、生产环境的区别
    阅站无数的我,只推荐下面这些让你起飞的
    访问控制符
    继承的意义
    数组继承的意义
    java 俄罗斯方块
    类和面向对象
    随机生成数组游戏
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/9986072.html
Copyright © 2020-2023  润新知