QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#631310#9434. Italian Cuisineptit_noodlesWA 1ms5892kbC++142.1kb2024-10-12 00:14:522024-10-12 00:14:54

Judging History

你现在查看的是最新测评结果

  • [2024-10-12 00:14:54]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5892kb
  • [2024-10-12 00:14:52]
  • 提交

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;
int n, m, x, y, res, test, cnt, sum, k;
int aa[N];
db EPS = 1e-15, 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 (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[i], a[x], A);
        while ((dist(A, a[i], a[k]) - r <= -EPS || abs(sum - sumy - S(a[i], a[k], A)) <= EPS) && ((k + 1) % n != i) && sum > EPS) {
            if (k == n) x = 1; else x = k + 1;
            sum -= S(a[i], a[k], a[x]);
            sumy -= S(A, a[k], a[x]);
            k = x;
        }
        ans = max(ans, sum);
    }
    ans *= 2.0;
    res = round(ans);
    cout << (int) res << endl;
}

signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> test;
    while (test--) sol();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5836kb

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:

5
24
0

result:

ok 3 number(s): "5 24 0"

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 5892kb

input:

1
6
0 0 499999993
197878055 -535013568
696616963 -535013568
696616963 40162440
696616963 499999993
-499999993 499999993
-499999993 -535013568

output:

286862654137719264

result:

wrong answer 1st numbers differ - expected: '0', found: '286862654137719264'