1451 合法三角形
codeforces
基準時間限制:1 秒 空間限制:131072 kb 分值: 80
難度:5級演算法題
有n個不同的點,問有多少組三元組能構成面積非0的三角形。
input
單組測試資料。output第一行乙個整數n (1 ≤ n ≤ 2000),表示點的數目。
接下來n行,每行包含兩個整數 xi, yi ( -100 ≤ xi, yi ≤ 100),表示第i個點的座標。輸入保證點是兩兩不同的。
輸出合法的三角形數目。input示例
4output示例0 01 1
2 02 2
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 對於任意的一條線,如果兩個端點都在圓外,則計算兩端點與圓心構成的角是否有鈍角,如果有則沒有...