有n個不同的點,問有多少組三元組能構成面積非0的三角形。
單組測試資料。
第一行乙個整數n (1 ≤ n ≤ 2000),表示點的數目。
接下來n行,每行包含兩個整數 xi, yi ( -100 ≤ xi, yi ≤ 100),表示第i個點的座標。輸入保證點是兩兩不同的。
輸出合法的三角形數目。
4 0 0
1 1
2 0
2 2n^2連邊計算斜率然後減去斜率相同的就好
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const
int maxn = 2222;
const
int inf = 0x3f3f3f3f;
const
double esp = 1e-6;
ll n;
ll rep = 0;
ll x[maxn], y[maxn];
double slope[maxn * maxn];
void solve()
else
slope[k++] = res;
}sort(slope, slope + k);
int last = 0, now = 1, tmp;
for (; now < k; now++)
}tmp = now - last;
rep += tmp * (tmp - 1) / 2;
}}int main()
solve();
printf("%lld\n", n * (n - 1) * (n - 2) / 6 - rep);
}
51nod 1451 合法三角形 列舉斜率
1451 合法三角形 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 有n個不同的點,問有多少組三元組能構成面積非0的三角形。input 單組測試資料。第一行乙個整數n 1 n 2000 表示點的數目。接下來n行,每行包含兩個整數 xi,yi...
51nold 1451 合法三角形 數學幾何
1451 合法三角形 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 有n個不同的點,問有多少組三元組能構成面積非0的三角形。input 單組測試資料。第一行乙個整數n 1 n 2000 表示點的數目。接下來n行,每行包含兩個整數 xi,yi...
51nod 圓與三角形
當時想的好麻煩啊.後來突然靈光一閃有了思路。思路如下 1逐個判斷相鄰兩點組成的線是否與圓有交點 2 對於任意的一條線,如果兩端點只有乙個在圓內則有交點 3 對於任意的一條線,如果兩個端點都在圓內則沒有交點 4 對於任意的一條線,如果兩個端點都在圓外,則計算兩端點與圓心構成的角是否有鈍角,如果有則沒有...