三角形~~行列式~~皮克公式~~gcd

链接:https://www.nowcoder.net/acm/contest/75/I
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

 

给你一个三角形的顶点A,B,C的坐标(坐标都为整数),请求出三角形的面积,三角形内的点的个数以及边AB、BC和AC边上的点的个数(不包括顶点ABC)

输入描述:

多组输入
每组输入三行,每行两个整数
第一行顶点A的坐标Xa,Ya.
第二行顶点B的坐标Xb,Yb.
第三行顶点C的坐标Xc,Yc.
0<=X,Y<=1,000,000
输入-1结束输入

输出描述:

每组输出一行,输出一个实数(保留一位小数),四个整数,分别代表三角形面积,三角形内的点的个数以及边AB、BC和AC边上的点的个数,每个数用空格隔开。
#include <iostream> 
#include <stdio.h> 
#include <string.h> 
#include <algorithm> 
#include <math.h> 
using namespace std;
#define LL long long 
long long int gcd(long long int a, long long int b)
{
    //cout << a << " x " << b << endl;
    if (b == 0)
    {
        return a;
    }
    else
    {
        return gcd(b, a%b);
    }
}
int main()
{
    long long int x[3], y[3];
    while (cin >> x[0] && x[0] != -1)
    {
        cin >> y[0];
        for (int s = 1; s <= 2; s++)
        {
            cin >> x[s] >> y[s];
        }
        long long int bian = gcd(fabs(x[0] - x[1]), fabs(y[0] - y[1])) + gcd(fabs(x[1] - x[2]), fabs(y[1] - y[2])) + gcd(fabs(x[2] - x[0]), fabs(y[2] - y[0]));
        //s=a+b/2-1;
        //cout << bian << endl;
        double s = fabs((x[0] * y[1] + x[1] * y[2] + x[2] * y[0] - x[0] * y[2] - x[1] * y[0] - x[2] * y[1])) / 2;
        long long int neibu = (s + 1 - bian / 2);
        printf("%.1lf %lld %lld %lld %lld\n", s, neibu, gcd(fabs(x[0] - x[1]), fabs(y[0] - y[1]))-1, gcd(fabs(x[1] - x[2]), fabs(y[1] - y[2]))-1, gcd(fabs(x[2] - x[0]), fabs(y[2] - y[0]))-1);
    }
    return 0;
}

全部评论

相关推荐

海康威视 软开岗 15k15
点赞 评论 收藏
分享
10-28 11:04
已编辑
美团_后端实习生(实习员工)
一个2人:我说几个点吧,你的实习经历写的让人觉得毫无含金量,你没有挖掘你需求里的 亮点, 让人觉得你不仅打杂还摆烂。然后你的简历太长了🤣你这个实习经历看完,估计没几个人愿意接着看下去, sdk, 索引这种东西单拎出来说太顶真了兄弟,好好优化下简历吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务