1 条题解

  • 0
    @ 2025-8-24 22:34:26

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Jerrlee✅

    搬运于2025-08-24 22:34:26,当前版本为作者最后更新于2021-11-10 17:02:49,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题意

    给出一个三角形三个顶点的坐标以及 nn 个点 pp 的坐标,求这个三角形的面积和在这 nn 个点中,有多少个点在这个三角形内部及边界上。

    思路

    三角形面积的公式已经给出了:xa(ybyc)+xb(ycya)+xc(yayb)2\dfrac{|x_a(y_b-y_c)+x_b(y_c-y_a)+x_c(y_a-y_b)|}2,所以我们只需要找到一种方法来检查输入的点 pp 是否在三角形 ABC 内。

    有一种方法可以满足题意,就是只计算三角形的面积。更准确地说,当且只有 ppABC 内时,三角形 ABPACPBCP 的面积之和等于 ABC 的面积。

    代码

    #include<cstdio>
    struct pt{
        int x,y; //定义点的坐标结构体
    };
    int area(pt a,pt b,pt c){ //计算面积
       int t=a.x*(b.y-c.y)+b.x*(c.y-a.y)+c.x*(a.y-b.y);
       if(t<0) return -t; //面积非负
       else return t;
    }
    int main(){
       pt a,b,c;
       scanf("%d%d%d%d%d%d",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y);
       int n,ans=0;
       scanf("%d",&n);
       for(int i=0;i<n;i++){
          pt p;
          scanf("%d%d",&p.x,&p.y);
          if(area(a,b,p)+area(a,c,p)+area(b,c,p)==area(a,b,c)) ans++; //判断面积是否相等
       }
       printf("%.1lf\n%d\n",area(a,b,c)/2.0,ans); //代入公式
    }
    

    AC记录

    • 1

    信息

    ID
    7216
    时间
    1000ms
    内存
    32MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者