T1 三角形面积
题目背景
请尽量在 20min 之内写完题目。这是指「写代码」的时间;「读题」时间不计算在内。
题目描述
给定平面直角坐标系上的三个整点 A , B , C A, B, C A,B,C 的坐标,求其围成的三角形面积。
数据保证答案一定是整数。所以如果你采用了浮点数来计算,请四舍五入到整数。
两点之间的距离公式: ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1, y_1), (x_2, y_2) (x1,y1),(x2,y2) 之间的距离是 ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2} (x1−x2)2+(y1−y2)2
海伦公式: 若三角形的边长为 a , b , c a, b, c a,b,c,则三角形的面积是 s ( s − a ) ( s − b ) ( s − c ) \sqrt{s(s-a)(s-b)(s-c)} s(s−a)(s−b)(s−c),其中 s = 1 2 ( a + b + c ) s=\frac12(a+b+c) s=21(a+b+c).
输入格式
共三行,每行表示一个三角形上的点。
每行包含两个正整数,表示点的坐标,形式为 x y
。
输出格式
共一行,一个整数,表示三角形面积。
样例 #1
样例输入 #1
10 20
30 40
50 50
样例输出 #1
100
提示说明
样例解释
可以通过海伦公式计算面积。方法如下。
A
B
AB
AB 距离:
(
30
−
10
)
2
+
(
40
−
20
)
2
≈
28.284
\sqrt{(30 - 10)^2 + (40 -20)^2} \approx 28.284
(30−10)2+(40−20)2≈28.284
B
C
BC
BC 距离:
(
50
−
30
)
2
+
(
50
−
40
)
2
≈
22.361
\sqrt{(50-30)^2 + (50-40)^2} \approx 22.361
(50−30)2+(50−40)2≈22.361
A
C
AC
AC 距离:
(
50
−
10
)
2
+
(
50
−
20
)
2
≈
50
\sqrt{(50-10)^2+(50-20)^2}\approx 50
(50−10)2+(50−20)2≈50
应用海伦公式,
s
≈
(
28.284
+
22.361
+
50
)
/
2
≈
50.323
s \approx (28.284 + 22.361 + 50) / 2 \approx 50.323
s≈(28.284+22.361+50)/2≈50.323
求出近似面积:
s
(
s
−
a
)
(
s
−
b
)
(
s
−
c
)
≈
10016.80
≈
100.08
\sqrt{s(s-a)(s-b)(s-c)} \approx \sqrt{10016.80} \approx 100.08
s(s−a)(s−b)(s−c)≈10016.80≈100.08,故答案为
100
100
100。
数据规模与约定
对于 100 % 100\% 100% 的数据:每个点的 x , y x, y x,y 坐标值一定在 [ 1 , 200 ] [1, 200] [1,200] 之内,均为整数;答案一定为正整数。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <sstream>//整型转字符串
// #include <stack>//栈
// #include <deque>//堆/优先队列
// #include <queue>//队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
double x1,x2,x3,y1,y2,y3;
cin>>x1>>y1>>x2>>y2>>x3>>y3;
double a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
double b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
double c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
double p=(a+b+c)/2;
double s=sqrt(p*(p-a)*(p-b)*(p-c));
cout<<round(s)<<endl;
return 0;
}