首页 > 代码库 > UVA - 11437

UVA - 11437

 

技术分享

 

 技术分享

题目大意:任意△ABC中F、D、E分别为三边的三等分点中点,将其分别与对应的顶点相连,得到一个新的△RPQ。

                现在给出△ABC的坐标,求△RPQ的面积

解题思路:求出△ABC的面积三角形 ABC 的面积

                  可以证明:S△BPQ :S△ABC = 1 : 7

 

也可以用每个边用向量缩减三倍求三分点,然后求三条直线的交点,然后就可以求面积了。

 

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <cmath>
 5 #include <algorithm>
 6 #include <string>
 7 #include <queue>
 8 #include <vector>
 9 #include <set>
10 #include <map>
11 #define ll long long
12 #define INF 0x3f3f3f3f
13 #define lowvit(x) x&(-x)
14 #define N 110
15 #define M 110
16 using namespace std;
17 struct Point {
18     double x, y;
19 };
20 double dist(Point *A, Point *B) {
21     return sqrt((A->x - B->x)*(A->x - B->x) + (A->y - B->y)*(A->y - B->y));
22 }
23 double area(Point *A, Point *B, Point *C) {
24     double a = dist(A, B);
25     double b = dist(A, C);
26     double c = dist(C, B);
27     double s = (a+b+c)/2.0;
28     return sqrt(s*(s-a)*(s-b)*(s-c));
29 }
30 int main() {
31     int t;
32     Point A, B, C, D, E, F, Q, R, P;
33     cin >> t;
34     while(t--) {
35         cin>>A.x>>A.y>>B.x>>B.y>>C.x>>C.y;
36         double are = area(&A, &B, &C);
37         if(are < 0) are = -are;
38         printf("%.0f\n",are/7);
39     }
40     return 0;
41 }

 

UVA - 11437