結果
| 問題 |
No.5018 Let's Make a Best-seller Book
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-10-01 14:20:53 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,738 bytes |
| コンパイル時間 | 468 ms |
| コンパイル使用メモリ | 87,292 KB |
| 実行使用メモリ | 76,796 KB |
| スコア | 0 |
| 最終ジャッジ日時 | 2023-10-01 14:20:57 |
| 合計ジャッジ時間 | 3,671 ms |
|
ジャッジサーバーID (参考情報) |
judge15 / judge11 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | TLE * 1 -- * 99 |
ソースコード
import random
import sys
input_count=0
def standing():
"""提出時はコメントアウトを解除
return map(int,input().split())
#"""
ret=tuple(map(int,input().split()))+(2000000,)
for i in range(10):
D[i]=float(input())
return ret
def sell(L):
global money,S,P,R,score
#"""提出時はコメントアウトを解除
print(1,*L)
money=int(input())
S=list(map(int,input().split()))
P=list(map(int,input().split()))
R=list(map(int,input().split()))
return money,S,P,R
#"""
print(1,*L)
Z=list(map(float,input().split()))
for i in range(10):
R[i]+=L[i]
S[i]=int(min(R[i],(R[i]**0.5)*(1.05**P[i])*D[i]*Z[i]))
score+=S[i]
money-=L[i]*500
money+=S[i]*1000
if R[i]!=0:
if S[i]<0.1*R[i]:
P[i]-=1
if S[i]>=0.3*R[i]:
P[i]+=1
P[i]=max(-60,min(P[i],60))
R[i]-=S[i]
return money,S,P,R
def adv(x):
global money,S,P,R,score
#"""提出時はコメントアウトを解除
print(2,x)
money=int(input())
S=list(map(int,input().split()))
P=list(map(int,input().split()))
R=list(map(int,input().split()))
return money,S,P,R
#"""
print(2,x)
Z=list(map(float,input().split()))
for i in range(10):
P[i]=max(-60,min(P[i]+x,60))
money-=pow(2,x-1)*500000
for i in range(10):
S[i]=int(min(R[i],(R[i]**0.5)*(1.05**P[i])*D[i]*Z[i]))
score+=S[i]
money+=S[i]*1000
if R[i]!=0:
if S[i]<0.1*R[i]:
P[i]-=1
if S[i]>=0.3*R[i]:
P[i]+=1
P[i]=max(-60,min(P[i],60))
R[i]-=S[i]
return money,S,P,R
pre=10
score=0
ad=27
D=[1]*10
T,N,money=standing()
S=[0 for i in range(N)]
P=[0 for i in range(N)]
R=[0 for i in range(N)]
for i in range(pre):
L=[0]*N
for j in range(10):
L[j]=110-R[j]
if P[j]<0:
L[j]=0
money,S,P,R=sell(L)
use=set()
for i in range(10):
if P[i]>=-1:
use.add(i)
if len(use)==0:
for i in range(10):
if P[i]==max(P):
use.add(i)
for i in range(ad):
if money>=1000000:
money,S,P,R=adv(2)
else:
L=[0]*N
for j in use:
lf=1
ri=998244353
while ri-lf>1:
mid=(lf+ri)//2
if (mid**0.5)*(10/3)*(1.05**P[j])>=mid:
lf=mid
else:
ri=mid
L[j]=max(0,min((money//500)//len(use),lf-R[j]))
money,S,P,R=sell(L)
for i in range(T-ad-pre):
L=[0]*N
for j in use:
L[j]=(money//500)//len(use)
money,S,P,R=sell(L)
print(score,file=sys.stderr)