結果
| 問題 |
No.2078 魔抜けなパープル
|
| コンテスト | |
| ユーザー |
taiga0629kyopro
|
| 提出日時 | 2022-09-08 00:42:35 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 58 ms / 2,000 ms |
| コード長 | 2,055 bytes |
| コンパイル時間 | 1,401 ms |
| コンパイル使用メモリ | 81,880 KB |
| 実行使用メモリ | 67,896 KB |
| 最終ジャッジ日時 | 2024-11-25 16:10:47 |
| 合計ジャッジ時間 | 1,502 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 7 |
ソースコード
#########################################
from collections import deque
class Convex_Hull_Trick():
#https://tjkendev.github.io/procon-library/python/convex_hull_trick/deque.html
#追加する傾きが単調減少かつqueryのxが単調増加
#単調性なしが良いならこちらへ(queryのxは先読み) https://judge.yosupo.jp/submission/30579
def __init__(self):
self.deq=deque()
def check(self,f1, f2, f3):
return (f2[0] - f1[0]) * (f3[1] - f2[1]) >= (f2[1] - f1[1]) * (f3[0] - f2[0])
def f(self,f1, x):
return f1[0] * x + f1[1]
# add f_i(x) = a*x + b
def add_line(self,a, b):
f1 = (a, b)
while len(self.deq) >= 2 and self.check(self.deq[-2], self.deq[-1], f1):
self.deq.pop()
self.deq.append(f1)
# min f_i(x)
def query(self,x):
while len(self.deq) >= 2 and self.f(self.deq[0], x) >= self.f(self.deq[1], x):
self.deq.popleft()
return self.f(self.deq[0], x)
##################################
def sol1(X,A):
#O(A)
ans = 2 ** 63
for k in range(1, A + 1):
cnt1 = k - A % k
cnt2 = A % k
res = cnt1 * ((A // k)**2) + cnt2 * ((A // k + 1)**2) + X * k
ans = min(ans, res)
return ans
def sol2(X,A):
#O(A)
dp=[2**63]*(A+1)
dp[0]=0
cht=Convex_Hull_Trick()
cht.add_line(0,0)
for i in range(1,A+1):
dp[i]=cht.query(i)+i**2+X
cht.add_line(-2*i,dp[i]+i**2)
return dp[A]
def sol3(X,A):
#O(√A)
R=A
ans=2**63
while R:
q=A//R
L=A//(q+1)+1
def f(k):
return k*(q**2)+(A-q*k)*(2*q+1)+X*k
ans=min(ans,f(L),f(R))
R=L-1
return ans
T=int(input())
for iii in range(T):
X,A=map(int,input().split())
print(sol3(X,A))
from random import randrange as rd
cnt=0
while 0:
cnt+=1
print(cnt)
X=rd(100)
A=rd(1,10**4)
ans1=sol1(X,A)
ans2=sol2(X,A)
ans3=sol3(X,A)
if not(ans1==ans2==ans3):
print(X,A)
exit()
taiga0629kyopro