QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#674177#9434. Italian CuisineyixuanoctML 0ms0kbC++201.9kb2024-10-25 14:23:332024-10-25 14:23:33

Judging History

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

  • [2024-10-25 14:23:33]
  • 评测
  • 测评结果:ML
  • 用时:0ms
  • 内存:0kb
  • [2024-10-25 14:23:33]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

#define int __int128
#define double long double

const int N = 1e6 + 7;
const int INF = 0x3f3f3f3f3f3f3f3f;

int read() {
    int res = 0;
    char scan[1005];
    scanf("%s", scan);
    for (int i = 0;i < strlen(scan);i++)
        res *= 10, res += scan[i] - '0';
    return res;
}
int print(int num) {
    if (num > 9) print(num / 10);
    putchar(num % 10 + '0');
}
int abs(int x) {
    if (x >= 0) return x;
    return -x;
}
struct Point {
    int x, y;

}pts[100007], cir;
int r;
int cross(Point p1, Point p2, Point p3) {
    return (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y);
}
struct Line {
    Point s, e;
    int a, b, c;
    Line(Point s, Point e) :s(s), e(e) { exchange(); };
    void exchange() {
        a = s.y - e.y;
        b = e.x - s.x;
        c = s.x * e.y - s.y * e.x;
    }
};
bool check(Point p, Point s, Point e, int r) {
    Line l(s, e);
    return (l.a * p.x + l.b * p.y + l.c) * ((l.a * p.x + l.b * p.y + l.c)) >= r * r * (l.a * l.a + l.b * l.b);
}
int rotate(Point* pts, int n) {
    int p = 0;
    int ans = 0, dif = 0;
    pts[n] = pts[0];
    for (int i = 0;i < n;i++) {
        dif -= abs(cross(pts[i], pts[(i - 1 + n) % n], pts[p]));
        while (cross(pts[p], cir, pts[i]) * cross(pts[p + 1], cir, pts[i]) >= 0 && check(cir, pts[i], pts[p + 1], r)) {
            dif += abs(cross(pts[p], pts[p + 1], pts[i]));
            p = (p + 1) % n;
        }
        ans = max(ans, dif);
    }
    return ans;
}
void solve() {
    int n;
    n = read();
    cir.x = read();
    cir.y = read();
    r = read();
    for (int i = 0;i < n;i++) pts[i].x = read(), pts[i].y = read();
    print(rotate(pts, n));
}

signed main() {
    ios::sync_with_stdio(false), cin.tie(0);
    int _ = 1;
    _ = read();
    while (_--) solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Memory Limit Exceeded

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:

512222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222...

result: