-
Notifications
You must be signed in to change notification settings - Fork 0
/
dist.cpp
93 lines (87 loc) · 2.27 KB
/
dist.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <bits/stdc++.h>
using namespace std;
struct point{
public:
int x, y;
/*CONSTRUCTOR*/
point(){
x = 0;
y = 0;
}
point(int _x, int _y){
x = _x;
y = _y;
}
/*OPERATOR*/
point operator = (pair <int, int> other){
x = other.first;
y = other.second;
return *this;
}
point operator = (const point other){
x = other.x;
y = other.y;
return *this;
}
bool operator == (const point other) const{
return (x == other.x && y == other.y);
}
bool operator != (const point other) const{
return !(*this == other);
}
};
struct line{
public:
int a, b, c;
/*CONSTRUCTOR*/
line(){
a = 0;
b = 0;
c = 0;
}
line(point A, point B){
a = B.y - A.y;
b = A.x - B.x;
c = B.x * A.y - B.y * A.x;
}
/*FUNCTION*/
bool isParallel(const line other) const{
return ((float) a * other.b == other.a * b && (float) other.a * c != a * other.c);
}
bool isSame(const line other) const{
return ((float) a * other.b == other.a * b && (float) other.a * c == a * other.c);
}
bool isIntersac(const line other) const{
return ((float) a * other.b != (float) other.a * b);
}
int f(point A){
return a * A.x + b * A.y + c;
}
double distTo(point A){
return abs(f(A)) / sqrt(a * a + b * b);
}
};
int intersacLine(point A, point B, point C, point D){
line x(A, B), y(C, D);
if (x.isSame(y)) return -1;
if (x.f(C) > 0 || x.f(D) > 0 || y.f(A) > 0 || y.f(B) > 0) return 0;
return 1;
}
int n, q;
point a[105];
int main(){
freopen("dist.inp", "r", stdin);
freopen("dist.out", "w", stdout);
scanf("%d%d", &n, &q);
for (int i = 1; i <= n; ++i){
int x, y;
scanf("%d%d", &x, &y);
a[i] = make_pair(x, y);
}
for (int p = 1; p <= q; ++p){
int i, j, k;
scanf("%d%d%d", &i, &j, &k);
printf("%.3f\n", line(a[j], a[k]).distTo(a[i]));
}
return 0;
}