竞赛讨论区 > 三角形
头像
NCU17崔士淼
发布于 2020-03-20 23:01
+ 关注

三角形

三角形

思路:

1.求面积:求面积可以用差积/2
2.求边上的点数:边上的点数边上x和y的坐标差的最大公阅数-1.

代码:

#include <bits/stdc++.h>

const double PI=acos(-1.0);
#define lowbit(x) (x&-x);
typedef long long LL;
using namespace std;
//最大公约数
LL gcd(LL a,LL b)
{
    return b==0?a:gcd(b,a%b);
}

struct Point{
    LL x,y;
    Point(LL x=0,LL y=0):x(x),y(y){}

};


//计算差积

double xmult(Point p1,Point p2,Point p0)
{
    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
 } 

int main()
{
    LL xa,ya,xb,yb,xc,yc;
    while(cin>>xa && xa!=-1)
    {
        cin>>ya;
        cin>>xb>>yb>>xc>>yc;

        Point a,b,c;
        a.x=xa,a.y=ya,b.x=xb,b.y=yb,c.x=xc,c.y=yc;

        LL s=abs(xmult(a,b,c));
        cout<<fixed<<setprecision(1)<<s*1.0/2<<" ";
        LL ab=gcd(abs(xa-xb),abs(ya-yb))-1;
        LL ac=gcd(abs(xa-xc),abs(ya-yc))-1;
        LL bc=gcd(abs(xb-xc),abs(yb-yc))-1;
        LL i=(s-(ab+ac+bc+3)+2)/2;

        cout<<i<<" "<<ab<<" "<<bc<<" "<<ac<<endl; 
    }

    return 0;
}

全部评论

(0) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐