Submission #30254752
Source Code Expand
from typing import *
from math import *
import sys
input = sys.stdin.readline
Point = Tuple[int, int]
INV_PHI = (sqrt(5) - 1) / 2
def ccw(a: Point, b: Point, c: Point) -> int:
cross = (b[0] - a[0]) * (c[1] - b[1]) - (b[1] - a[1]) * (c[0] - b[0])
if cross > 0: # a -> b -> c is counter clockwise
return 1
elif cross == 0:
return 0
else: # a -> b -> c is clockwise
return -1
class ConvexHull:
def __init__(self, p: List[Point]) -> None:
self.p = p
lower = self.lower = []
upper = self.upper = []
p.sort()
lower.extend(p[:2])
upper.extend(p[:2])
for x in p[2:]:
lower.append(x)
upper.append(x)
while len(lower) >= 3 and ccw(*lower[-3:]) <= 0:
lower.pop(-2)
while len(upper) >= 3 and ccw(*upper[-3:]) >= 0:
upper.pop(-2)
def get(self, a: int, b: int) -> int:
p = self.upper if b > 0 else self.lower
# golden-section search
def f(i: int) -> int:
x, y = p[i]
return a * x + b * y
l = 0
r = len(p) - 1
r2 = int(round(r * INV_PHI))
f_r2 = f(r2)
while abs(r - l) >= 6:
l2 = r + int(round((l - r) * INV_PHI))
f_l2 = f(l2)
if f_l2 < f_r2:
l, r = r, l2
else:
r, r2, f_r2 = r2, l2, f_l2
if l > r:
l, r = r, l
return max(f(i) for i in range(l, r + 1))
Q = int(input())
S = []
for i in range(1, Q + 1):
X, Y, A, B = map(int, input().split())
S.append(ConvexHull([(X, Y)]))
while (i & 1) == 0:
i >>= 1
p1 = S.pop().p
p2 = S.pop().p
S.append(ConvexHull(p1 + p2))
print(max(s.get(A, B) for s in S))
Submission Info
| Submission Time | |
|---|---|
| Task | Ex - Linear Maximization |
| User | tatyam |
| Language | PyPy3 (7.3.0) |
| Score | 600 |
| Code Size | 1887 Byte |
| Status | AC |
| Exec Time | 3322 ms |
| Memory | 130516 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 600 / 600 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_01.txt, sample_02.txt |
| All | circle_01.txt, circle_02.txt, circle_03.txt, circle_04.txt, dence_01.txt, dence_02.txt, large_01.txt, large_02.txt, line2_01.txt, line2_02.txt, line2_03.txt, line_01.txt, line_02.txt, line_03.txt, prec_01.txt, prec_02.txt, sample_01.txt, sample_02.txt, small_01.txt, small_02.txt, small_03.txt, small_04.txt, small_05.txt, small_06.txt, small_07.txt, small_08.txt, small_09.txt, small_10.txt, zero_01.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| circle_01.txt | AC | 3284 ms | 128816 KiB |
| circle_02.txt | AC | 3322 ms | 130516 KiB |
| circle_03.txt | AC | 3170 ms | 130348 KiB |
| circle_04.txt | AC | 3183 ms | 128748 KiB |
| dence_01.txt | AC | 2180 ms | 120464 KiB |
| dence_02.txt | AC | 2247 ms | 121456 KiB |
| large_01.txt | AC | 2438 ms | 117536 KiB |
| large_02.txt | AC | 2396 ms | 116456 KiB |
| line2_01.txt | AC | 1697 ms | 116724 KiB |
| line2_02.txt | AC | 1642 ms | 116856 KiB |
| line2_03.txt | AC | 1685 ms | 117244 KiB |
| line_01.txt | AC | 1777 ms | 108380 KiB |
| line_02.txt | AC | 1714 ms | 109688 KiB |
| line_03.txt | AC | 1753 ms | 109104 KiB |
| prec_01.txt | AC | 2266 ms | 118996 KiB |
| prec_02.txt | AC | 2312 ms | 120384 KiB |
| sample_01.txt | AC | 102 ms | 74832 KiB |
| sample_02.txt | AC | 86 ms | 75116 KiB |
| small_01.txt | AC | 89 ms | 75052 KiB |
| small_02.txt | AC | 89 ms | 74904 KiB |
| small_03.txt | AC | 91 ms | 74908 KiB |
| small_04.txt | AC | 88 ms | 75140 KiB |
| small_05.txt | AC | 87 ms | 75136 KiB |
| small_06.txt | AC | 92 ms | 74972 KiB |
| small_07.txt | AC | 106 ms | 76148 KiB |
| small_08.txt | AC | 145 ms | 77652 KiB |
| small_09.txt | AC | 208 ms | 79264 KiB |
| small_10.txt | AC | 262 ms | 79736 KiB |
| zero_01.txt | AC | 2011 ms | 123188 KiB |