#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
int n, a, b;
cin >> n;
vector<pair<int, int>> points;
for (int i = 0; i < n; i++) {
cin >> a >> b;
points.push_back({ a, b });
}
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (points[i] == points[j]) continue;
int small = min(points[i].first, points[j].first);
int big = max(points[i].first, points[j].first);
bool works = true;
for (int k = 0; k < n; k++) {
if (points[i] == points[k] || points[j] == points[k]) continue;
for (int l = k + 1; l < n; l++) {
if (points[i] == points[l] || points[j] == points[l] || points[k] == points[l]) continue;
int osmall = min(points[k].first, points[l].first);
int obig = max(points[k].first, points[l].first);
if (i == k || j == k || i == l || j == l) continue;
long double m1, m2;
if (points[i].first == points[j].first)
m1 = 1e10;
else
m1 = ((long double)points[j].second - points[i].second) / (points[j].first - points[i].first);
if (points[k].first == points[l].first)
m2 = 1e10;
else
m2 = ((long double)points[l].second - points[k].second) / (points[l].first - points[k].first);
long double c1 = (long double)points[i].second - m1 * points[i].first;
long double c2 = (long double)points[k].second - m2 * points[k].first;
if (abs(m1 - m2) < 1e-6 && abs(c1 - c2) > 1e-6) continue;
if (abs(m1 - m2) < 1e-6 && (big > osmall || small < obig)) { works = false;
break;
}
long double x = (c2 - c1) / (m1 - m2);
if (small - x < -1e-6 && x - big < -1e-6 && osmall - x < -1e-6 && x - obig < -1e-6) {
works = false;
break;
}
}
if (!works) break;
}
ans += works;
}
}
cout << ans << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |