【三角形斜率】【数论】三角形(triangle)
发布日期:2021-05-07 22:46:36 浏览次数:21 分类:精选文章

本文共 793 字,大约阅读时间需要 2 分钟。

题目描述

平面上有n个点,求出用这些点可以构成的三角形数。

输入

第一行一个整数n。

接下来n行,每行两个整数,表示点的坐标。

输出

输出仅一个整数,表示所求答案。

输入样例
50 01 11 -1-1 -1-1 1
输出样例
8

思路

先计算n个点(无限制)最多能构成的三角形数。

然后计算斜率,去除斜率相同的两边连接的三点能构成的三角形数。


代码

#include
#include
#include
using namespace std;long long n,x[10001],y[10001],count,ans,t,l;double b[10000001];int main(){ scanf("%lld",&n); ans = n * (n-1) * (n-2) / 6; for(long long i = 1; i <= n; ++i){ scanf("%lld%lld",&x[i],&y[i]); t = 0; l = 1; for(long long j = i-1; j; --j){ if(x[i] - x[j] == 0) b[++t] = 10000000000; else b[++t] = (double)(y[i] - y[j]) / (double)(x[i] - x[j]); } sort(b+1,b+1+t); for(long long j = 2; j <= t; ++j){ if(b[j] == b[j-1]) ++l; else{ ans -= l * (l-1) / 2; l = 1; } } ans -= l * (l-1) / 2; } printf("%lld",ans);} ```
上一篇:【输出中文字符】洛谷U89431 a+b
下一篇:【c++自带堆】剑与魔法(dragons

发表评论

最新留言

很好
[***.229.124.182]2025年04月16日 08时22分51秒