AT812 Solution

· · 题解

解题方法

计算由a,b,c三点构成的三角形的面积,应该怎么计算呢?

记得小学时候的数格子吗?当时我们是怎么计算的?

对了,是正方形减去三个三角形

公式:

S=(x_c-x_a)(y_c-y_b)-\frac{(x_a-x_b)(y_b-y_a)+(x_a-x_c)(y_c-y_a)+(x_c-x_b)(y_b-y_c)}{2}

因式分解后:

S=\frac{(x_c-x_b)(y_a-y_b)-(x_a-x_b)(x_c-y_b)}{2}

最后代入即可

代码:

#include <bits/stdc++.h>
using namespace std;

struct node
{
    long long x;
    long long y;    
};

long long ans=0;

node a[110];
long long n;

long long lenx(int b1,int b2)
{
    return a[b1].x-a[b2].x;
}

long long leny(int b1,int b2)
{
    return a[b1].y-a[b2].y;
}

int main()
{
    cin >> n;
    for (int i=1; i<=n; i++)
    {
        cin >> a[i].x >> a[i].y;
    }
    for (int i=1; i<=n; i++)
    {
        for (int j=1; j<i; j++)
        {
            for (int k=1; k<j; k++)
            {
                long long S=lenx(i,j)*leny(i,k)-leny(i,j)*lenx(i,k);//公式运用
                if (S!=0&&S%2==0) ans++;
            }
        }
    }
    cout << ans << endl;
    return 0;
}