QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#745128 | #9434. Italian Cuisine | fosov | TL | 0ms | 3836kb | C++14 | 2.3kb | 2024-11-14 06:00:48 | 2024-11-14 06:00:49 |
Judging History
answer
#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define LNF 0x3f3f3f3f3f3f3f3fll
#define MOD 998244353
#define pii pair<int, int>
struct Point {
ll x, y;
Point() {};
Point(int x, int y): x(x), y(y) {};
Point operator+ (const Point& p) const {
return Point(x + p.x, y + p.y);
}
Point operator- (const Point& p) const {
return Point(x - p.x, y - p.y);
}
ll operator* (const Point& p) const {
return x * p.y - y * p.x;
}
ll operator/ (const Point& p) const {
return x * p.x + y * p.y;
}
};
bool circle_line_intersect(Point c, ll r, Point la, Point lb) {
Point l = la - lb;
if (l.x == 0 && l.y == 0) return 0;
Point rl = Point(-l.y, l.x);
return abs((la - c) / rl) <= r * sqrt(rl / rl);
}
bool point_in_triangle(Point a, Point b, Point c, Point x) {
if ((b - a) * (c - a) == 0) return 0;
if ((a - b) * (c - b) == 0) return 0;
if ((a - c) * (b - c) == 0) return 0;
ll s0 = (b - a) * (x - a);
ll s1 = (c - b) * (x - b);
ll s2 = (a - c) * (x - c);
bool has_neg = (s0 < 0) || (s1 < 0) || (s2 < 0);
bool has_pos = (s0 > 0) || (s1 > 0) || (s2 > 0);
return !(has_neg && has_pos);
}
int main() {
#ifdef TEST
freopen("zz.in", "r+", stdin);
#endif
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t; cin >> t;
while (t --) {
int n; cin >> n;
vector<Point> conv(n);
Point c;
int r;
cin >> c.x >> c.y >> r;
for (int i = 0; i < n; ++ i) cin >> conv[i].x >> conv[i].y;
ll res = 0;
ll area = 0;
for (int i = 0, j = -1; i < n; ++ i) {
if (area == 0) j = (i + 1) % n;
while (!circle_line_intersect(c, r, conv[i], conv[j]) && (j <= i+1 || !point_in_triangle(conv[i], conv[j-1], conv[j], c))) {
if (j > i+1) {
area += (conv[(j+n-1)%n] - conv[i]) * (conv[j] - conv[i]);
}
j = (j + 1) % n;
}
res = max(res, area);
if (j - i >= 3) area -= (conv[i+1] - conv[i]) * (conv[j-1] - conv[i]);
}
cout << res << '\n';
}
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3612kb
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: 0
Accepted
time: 0ms
memory: 3836kb
input:
1 6 0 0 499999993 197878055 -535013568 696616963 -535013568 696616963 40162440 696616963 499999993 -499999993 499999993 -499999993 -535013568
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: -100
Time Limit Exceeded
input:
6666 19 -142 -128 26 -172 -74 -188 -86 -199 -157 -200 -172 -199 -186 -195 -200 -175 -197 -161 -188 -144 -177 -127 -162 -107 -144 -90 -126 -87 -116 -86 -104 -89 -97 -108 -86 -125 -80 -142 -74 -162 -72 16 -161 -161 17 -165 -190 -157 -196 -154 -197 -144 -200 -132 -200 -128 -191 -120 -172 -123 -163 -138...