51nod 1451 合法三角形 列舉斜率

2021-07-08 22:04:49 字數 1710 閱讀 4626

1451 合法三角形

codeforces

基準時間限制:1 秒 空間限制:131072 kb 分值: 80 

難度:5級演算法題

有n個不同的點,問有多少組三元組能構成面積非0的三角形。

input

單組測試資料。

第一行乙個整數n (1 ≤ n ≤ 2000),表示點的數目。

接下來n行,每行包含兩個整數 xi, yi ( -100 ≤ xi, yi ≤ 100),表示第i個點的座標。輸入保證點是兩兩不同的。

output

輸出合法的三角形數目。
input示例

4

0 01 1

2 02 2

output示例

3
完全是水過的,感覺斜率在精度上還可以再卡我幾次。。。

一開始按照x點座標來暴力,t掉了,想也是,乙個6層迴圈。。。

然後考慮列舉斜率,判重。但因為斜率是double型,搞了乙個map,結果精度上還是不行。

把斜率擴大很多很多倍,開了乙個很大很大的陣列,一開始memset又把我給t了,最後記錄了一下數值,終於算是水過了。

a了之後看了別的人的做法,用double陣列記錄,排一下序,再去掃一遍判重是乙個更好的做法。

**:

#pragma warning(disable:4996)  

#include #include #include #include #include #include #include using namespace std;

typedef long long ll;

ll n;

ll x[2005], y[2005];

int vis[8000005];

void input()

void solve()

else

int r = res;

}for (h = 0; h < k; h++)

}printf("%lld\n", n*(n - 1)*(n - 2) / 6 - repeat);

}int main()

重新寫了一下上面那個思路的,這個比之前的靠譜多了,相對來說時間會長一些。

**:

#pragma warning(disable:4996)  

#include #include #include #include #include #include #include using namespace std;

typedef long long ll;

#define eps 1e-6

ll n;

ll x[2005], y[2005];

double xy[4000005];

void input()

void solve()

else

xy[k++] = res;

} sort(xy, xy + k);

j = 0;

for (h = 1; h < k; h++)

}repeat += (h - j)*(h - j - 1) / 2;

} printf("%lld\n", n*(n - 1)*(n - 2) / 6 - repeat);

}int main()

51nod 1451 合法三角形

有n個不同的點,問有多少組三元組能構成面積非0的三角形。單組測試資料。第一行乙個整數n 1 n 2000 表示點的數目。接下來n行,每行包含兩個整數 xi,yi 100 xi,yi 100 表示第i個點的座標。輸入保證點是兩兩不同的。輸出合法的三角形數目。4 0 0 1 1 2 0 2 2n 2連邊...

51nold 1451 合法三角形 數學幾何

1451 合法三角形 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 有n個不同的點,問有多少組三元組能構成面積非0的三角形。input 單組測試資料。第一行乙個整數n 1 n 2000 表示點的數目。接下來n行,每行包含兩個整數 xi,yi...

51nod 圓與三角形

當時想的好麻煩啊.後來突然靈光一閃有了思路。思路如下 1逐個判斷相鄰兩點組成的線是否與圓有交點 2 對於任意的一條線,如果兩端點只有乙個在圓內則有交點 3 對於任意的一條線,如果兩個端點都在圓內則沒有交點 4 對於任意的一條線,如果兩個端點都在圓外,則計算兩端點與圓心構成的角是否有鈍角,如果有則沒有...