Pagini recente » Cod sursa (job #965798) | Cod sursa (job #1228930) | Cod sursa (job #1522120) | Cod sursa (job #357057) | Cod sursa (job #2592189)
#include <fstream>
#include <algorithm>
#include <cmath>
#define ld long double
using namespace std;
ifstream cin ("triang.in");
ofstream cout ("triang.out");
const ld EPS = 1e-4;
int n, ans;
pair <ld, ld> v[1505];
bool compS(pair <ld, ld> a, pair <ld, ld> b) {
if(abs(b.first - a.first) < EPS)
return b.second > a.second;
return b.first > a.first;
}
bool find(ld x, ld y) {
int st = 1, dr = n, mid;
while(st <= dr) {
mid = (st + dr) >> 1;
if(fabs(v[mid].first - x) < EPS && fabs(v[mid].second - y) < EPS)
return 1;
if(v[mid].first > x || (fabs(v[mid].first - x) < EPS && v[mid].second > y))
dr = mid - 1;
else
st = mid + 1;
}
return 0;
}
int main() {
cin >> n;
for(int i = 1; i <= n; i++)
cin >> v[i].first >> v[i].second;
sort(v + 1, v + n + 1, compS);
for(int i = 1; i <= n; i++) {
for(int j = i + 1; j <= n; j++) {
ld x = (v[i].first + v[j].first) / 2 - sqrtf(3) / 2 * (v[j].second - v[i].second), y = (v[i].second + v[j].second) / 2 + sqrtf(3) / 2 * (v[j].first - v[i].first);
ans += find(x, y);
x = (v[i].first + v[j].first) / 2 + sqrtf(3) / 2 * (v[j].second - v[i].second), y = (v[i].second + v[j].second) / 2 - sqrtf(3) / 2 * (v[j].first - v[i].first);
ans += find(x, y);
}
}
cout << ans / 3;
return 0;
}