#include<bits/stdtr1c++.h> using namespace std; inline static const nullptr_t _={ ios_base::sync_with_stdio(0); cin.tie(nullptr),cout.tie(nullptr); return nullptr; }(); double distance(int x1, int y1, int x2, int y2) { return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2)); } double triangleArea(int x1, int y1, int x2, int y2, int x3, int y3) { double area = 0.5 * abs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)); return area; } double totalTriangleArea(vector<pair<int, int>>& points) { int n = points.size(); double totalArea = 0.0;

unordered_map<int, unordered_map<int, int>> hash;
for (int i = 0; i < n; i++) {
    hash[points[i].first][points[i].second] = i;
}

vector<double> distances;
for (int i = 0; i < n-1; i++) {
    for (int j = i + 1; j < n; j++) {
        int x1 = points[i].first;
        int y1 = points[i].second;
        int x2 = points[j].first;
        int y2 = points[j].second;
        double dist = distance(x1, y1, x2, y2);
        distances.push_back(dist);
    }
}
sort(distances.begin(), distances.end());

for (int i = 0; i < n - 2; i++) {
    for (int j = i + 1; j < n - 1; j++) {
        for (int k = j + 1; k < n; k++) {
            int x1 = points[i].first;
            int y1 = points[i].second;
            int x2 = points[j].first;
            int y2 = points[j].second;
            int x3 = points[k].first;
            int y3 = points[k].second;
            
            double dist1 = distance(x1, y1, x2, y2);
            double dist2 = distance(x1, y1, x3, y3);
            double dist3 = distance(x2, y2, x3, y3);
            
            // Find the index of the smallest two distances in the sorted distances array
            int idx1 = lower_bound(distances.begin(), distances.end(), dist1) - distances.begin();
            int idx2 = lower_bound(distances.begin(), distances.end(), dist2) - distances.begin();
            int idx3 = lower_bound(distances.begin(), distances.end(), dist3) - distances.begin();
            
            double area = triangleArea(x1, y1, x2, y2, x3, y3);
            totalArea += area;
        }
    }
}
return totalArea;

} int main() { int n; cin>>n; vector<pair<int, int>> points(n); for(int i=0;i<n;i++) cin>>points[i].first>>points[i].second; double result=totalTriangleArea(points); cout<<fixed<<setprecision(1)<<result<<'\n'; return 0;


原文地址: https://www.cveoy.top/t/topic/h8o4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录