From 46d45fa9800f07cef317b76191e03e5229a8d3d2 Mon Sep 17 00:00:00 2001 From: chayan das Date: Wed, 3 Dec 2025 23:49:38 +0530 Subject: [PATCH] Create 3625. Count Number of Trapezoids II --- 3625. Count Number of Trapezoids II | 62 +++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 3625. Count Number of Trapezoids II diff --git a/3625. Count Number of Trapezoids II b/3625. Count Number of Trapezoids II new file mode 100644 index 0000000..9db3725 --- /dev/null +++ b/3625. Count Number of Trapezoids II @@ -0,0 +1,62 @@ +class Solution { +public: + int countTrapezoids(vector>& points) { + int n = points.size(); + int INF = 1e9 + 7; + unordered_map> slopeToIntercept; + unordered_map> midToSlope; + int res = 0; + + for (int i = 0; i < n; i++) { + int x1 = points[i][0]; + int y1 = points[i][1]; + for (int j = i + 1; j < n; j++) { + int x2 = points[j][0]; + int y2 = points[j][1]; + int dx = x1 - x2; + int dy = y1 - y2; + + float k , b; + if (x2 == x1) { + k = INF; + b = x1; + } + else { + k = (float)(y2 - y1) / (x2 - x1); + b = (float)(y1 * dx - x1 * dy) / dx; + } + + int mid = (x1 + x2) * 10000 + (y1 + y2); + slopeToIntercept[k].push_back(b); + midToSlope[mid].push_back(k); + } + } + + for (auto& [_ , sti] : slopeToIntercept) { + if (sti.size() == 1) continue; + + map count; + for (float b : sti) count[b]++; + + int sum = 0; + for (auto& [_ , cnt] : count) { + res += (sum * cnt); + sum += cnt; + } + } + + for (auto& [_ , mts] : midToSlope) { + if (mts.size() == 1) continue; + + map count; + for (float k : mts) count[k]++; + + int sum = 0; + for (auto& [_ , cnt] : count) { + res -= (sum * cnt); + sum += cnt; + } + } + return res; + } +};