Asa's Website

C - 直訴

cpatcodergeometrydiff experimentaldiff brown

最終更新日

Table of Contents

Loading...

問題

https://atcoder.jp/contests/abc002/tasks/abc002_3

問題文

A=(xa,ya),B=(xb,yb),C=(xc,yc)A=(x_a, y_a), B=(x_b, y_b), C=(x_c, y_c) がこの順に与えられる。ABC\triangle ABC の面積は?

制約

サンプル

I/O 1

1 0 3 0 2 5
5.0

I/O 2

-1 -2 3 4 5 6
2.0

I/O 3

298 520 903 520 4 663
43257.5

考察

まあいろんなやり方あるけど、ヘロンの公式を知っていますか? (ヒントがあったけどガン無視)

ヘロンの公式

ABC\triangle ABC において、 a=BC,b=CA,c=ABa = BC, b = CA, c = AB とする (順番は気にしないけど、3 辺の長さ)。
このとき、 s=a+b+c2s = \frac{a+b+c}{2} として、 ABC=s(sa)(sb)(sc)\triangle ABC = \sqrt{s (s - a) (s - b) (s - c)} が成り立つ。

証明は略。

コード

https://atcoder.jp/contests/abc002/submissions/27501700

double sqr(double x) { return x * x; } int main() { double ax, ay, bx, by, cx, cy; cin >> ax >> ay >> bx >> by >> cx >> cy; double a = sqrt(sqr(ax - bx) + sqr(ay - by)); double b = sqrt(sqr(bx - cx) + sqr(by - cy)); double c = sqrt(sqr(cx - ax) + sqr(cy - ay)); double s = (a + b + c) / 2; cout << fixed << setprecision(5) << sqrt(s * (s - a) * (s - b) * (s - c)) << endl; }