QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#631323 | #9434. Italian Cuisine | ptit_noodles | WA | 1ms | 5900kb | C++20 | 2.1kb | 2024-10-12 00:36:45 | 2024-10-12 00:36:46 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define ii pair<int, int>
#define db long double
const int N = 3e5+5, M = 1e3+5, MOD = 1e9+7, inf = 1e18;
const db EPS = 1e-19;
int n, m, x, y, res, test, cnt, sum, k;
int aa[N];
db r;
struct point{
db x, y;
} a[N], A;
struct pt{
db a, b, c; // ax + by + c = 0
};
pt findPt(point a, point b) {
return {a.y - b.y, b.x - a.x, a.x * b.y - a.y * b.x};
}
db dist(point x, point A, point B) { // kc tu diem x den AB
pt dt = findPt(A, B);
return abs(dt.a * x.x + dt.b * x.y + dt.c) / sqrt(dt.a * dt.a + dt.b * dt.b);
}
db S(point A, point B, point C) { //dien tich tam giac ABC
return abs((B.x - A.x) * (C.y - A.y) - (C.x - A.x) * (B.y - A.y)) / 2;
}
void sol() {
cin >> n >> A.x >> A.y >> r;
for (int i = 1; i <= n; ++i) cin >> a[i].x >> a[i].y;
db sum = 0, sumy = 0;
for (int i = n - 1; i > 0; --i) {
db d = dist(A, a[i], a[n]);
if (d - r > EPS || abs(d - r) <= EPS) {
k = i;
sumy += S(A, a[i], a[i + 1]);
if (i + 1 < n) sum += S(a[n], a[i], a[i + 1]);
if (i + 1 < n && abs(sum - sumy - S(A, a[n], a[i])) <= EPS) {
k = i + 1; sumy -= S(A, a[i], a[i + 1]); sum -= S(a[n], a[i], a[i + 1]);
break;
}
}
else {
break;
}
}
db ans = sum;
for (int i = 1; i < n; ++i) {
if (i == 1) x = n; else x = i - 1;
sum += S(a[i], a[x], a[k]);
sumy += S(A, a[i], a[x]);
while ((dist(A, a[i], a[k]) - r < EPS || abs(sum - sumy - S(A, a[i], a[k])) <= EPS) && (((k + 1) % n) != i) && (sum > 0.0)) {
y = (k + 1) % n;
sum -= S(a[i], a[k], a[y]);
sumy -= S(A, a[k], a[y]);
k = y;
}
ans = max(ans, sum);
}
ans *= 2.0;
res = (int) ans;
cout << (int) res << endl;
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> test;
while (test--) sol();
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 5900kb
input:
3 5 1 1 1 0 0 1 0 5 0 3 3 0 5 6 2 4 1 2 0 4 0 6 3 4 6 2 6 0 3 4 3 3 1 3 0 6 3 3 6 0 3
output:
15 24 9
result:
wrong answer 1st numbers differ - expected: '5', found: '15'