結果
| 問題 |
No.1251 絶対に間違ってはいけない最小化問題
|
| コンテスト | |
| ユーザー |
uni_python
|
| 提出日時 | 2020-10-09 22:45:23 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 978 bytes |
| コンパイル時間 | 271 ms |
| コンパイル使用メモリ | 81,920 KB |
| 実行使用メモリ | 127,128 KB |
| 最終ジャッジ日時 | 2024-07-20 13:13:23 |
| 合計ジャッジ時間 | 60,326 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 WA * 25 |
ソースコード
import sys
input=sys.stdin.readline
def I(): return int(input())
def MI(): return map(int, input().split())
def LI(): return list(map(int, input().split()))
def main():
import bisect
N=I()
A=LI()
B=LI()
A,B = zip(*sorted(zip(A, B)))
S=[0]*(N+1)
for i in range(N):
S[i+1]=S[i]+B[i]
M=10**6 + 5
def calc(x,prev):
# prvの時から,num以下のものは0.5かけで増える,以上なら0.5かけでヘル
num=bisect.bisect_left(A,x)
aa=S[num]
bb=S[-1]-S[num]
res=prev + aa*0.5 - bb*0.5
# print(x,num,res)
return res
prev=0
for i in range(N):
prev+=B[i]*abs(-M-A[i])
ans=prev
xi=-M
for i in range(-2*M+1,2*M+1):
x=i/2
temp=calc(x,prev)
#print(x,temp)
if temp<ans:
ans=temp
xi=x
prev=temp
print(xi,int(ans))
main()
uni_python