QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#674177 | #9434. Italian Cuisine | yixuanoct | ML | 0ms | 0kb | C++20 | 1.9kb | 2024-10-25 14:23:33 | 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...