只有写成①或添加②才能AC,有人知道这是为什么吗
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 200010;
struct Point {
int x, y;
// 向量
Point operator-(const Point& b)const {
return { x - b.x,y - b.y };
}
// 叉积
int operator^(const Point& b)const {
return x * b.y - y * b.x;
}
}a[N];
// 逆时针
int area(Point a, Point b, Point c) {
return abs((b - a) ^ (c - a));
}
void solve() {
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i].x >> a[i].y;
for (int i = 1; i <= n; i++) a[n + i] = a[i];
int mid = 1 + k + 1;
int l = 1, r = 1 + k;
int res = 0, ma = 0;
for (int i = 2; i <= r; i++) res += area(a[1], a[i - 1], a[i]);
for (; l <= n; l++, r++) {
while (mid < n + l - 1 && area(a[l], a[r], a[mid]) < area(a[l], a[r], a[mid + 1])) mid++;
// while (mid < n + l - 1 && area(a[l], a[r], a[mid]) <= area(a[l], a[r], a[mid + 1])) mid++; ①
// if (mid == r) mid++; ②
ma = max(ma, res + area(a[l], a[r], a[mid]));
res -= area(a[l], a[l + 1], a[r]);
res += area(a[l + 1], a[r], a[r + 1]);
}
printf("%.12lf\n", ma * 1.0 / 2.0);
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
int T = 1;
cin >> T;
while (T--) {
solve();
}
return 0;
}