結果
| 問題 |
No.2012 Largest Triangle
|
| コンテスト | |
| ユーザー |
googol_S0
|
| 提出日時 | 2022-07-15 22:32:08 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,625 bytes |
| コンパイル時間 | 78 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 18,468 KB |
| 最終ジャッジ日時 | 2024-06-27 19:16:55 |
| 合計ジャッジ時間 | 5,593 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 8 WA * 7 TLE * 1 -- * 25 |
ソースコード
from decimal import *
def sgn(x):
if x==0:
return 0
if x>0:
return 1
return -1
def check(a,b,c):
#if a==b or b==c:
# return sgn(b[0]-a[0])*sgn(c[1]-b[1])>=sgn(c[0]-b[0])*sgn(b[1]-a[1])
return (b[0]-a[0])*(c[1]-b[1])>=(c[0]-b[0])*(b[1]-a[1])
def get_y(a,x):
return a[0]*x+a[1]
from collections import deque
class CHT:
__slots__=['H','F']
def __init__(self,f):
self.H=deque()
self.F=f
def add(self,x):
h=self.H
if self.F:
x=(-x[0],-x[1])
if len(h)==0:
h.append(x)
return 0
if h[0][0]<=x[0]:
if h[0][0]==x[0]:
if h[0][1]<=x[1]:
return 0
h.popleft()
while(len(h)>=2 and check(x,h[0],h[1])):
h.popleft()
h.appendleft(x)
else:
if(h[-1][0]==x[0]):
if(h[-1][1]<=x[1]):
return 0
h.pop()
while(len(h)>=2 and check(h[-2],h[-1],x)):
h.pop()
h.append(x)
def query_i(self,x):
h=self.H
a=h[0]
if len(h)>=2:
b=h[1]
while(len(h)>=2 and a[0]*x+a[1]>=b[0]*x+b[1]):
h.popleft()
a=b
if len(h)<2:
break
b=h[1]
if self.F:
return -a[0]*x-a[1]
else:
return a[0]*x+a[1]
N=int(input())
eps=1e-12
X=[tuple(map(lambda x:Decimal(int(x)+eps),input().split())) for i in range(N)]
X.sort(key=lambda x:x[0]/x[1])
A=CHT(False)
B=CHT(False)
getcontext().prec=30
ANS=0
for i in range(N):
a,b=X[i][0],X[i][1]
if i:
ANS=max(ANS,B.query_i(a/b)*b)
B.add((b,-a))
for i in range(N):
a,b=X[i][0],X[i][1]
if i:
ANS=max(ANS,-A.query_i(a/b)*b)
A.add((-b,a))
print(round(ANS))
googol_S0