QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#631320#9434. Italian Cuisineptit_noodlesWA 1ms5844kbC++202.1kb2024-10-12 00:31:132024-10-12 00:31:13

Judging History

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

  • [2024-10-12 00:31:13]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5844kb
  • [2024-10-12 00:31:13]
  • 提交

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[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)) {
            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: 5844kb

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'