結果
| 問題 |
No.5001 排他的論理和でランニング
|
| ユーザー |
👑 Kazun
|
| 提出日時 | 2020-07-10 17:27:56 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,457 ms / 1,500 ms |
| コード長 | 850 bytes |
| コンパイル時間 | 246 ms |
| 実行使用メモリ | 111,620 KB |
| スコア | 52,428,743 |
| 最終ジャッジ日時 | 2020-07-10 17:29:14 |
|
ジャッジサーバーID (参考情報) |
judge7 / judge9 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 50 |
ソースコード
from random import sample,randint,random
from time import time
from math import exp
import sys
#-------------------------------------------------
TIME_LIMIT=1.060
ALPHA=0.025
ep=10**(-10)
#-------------------------------------------------
def Probability(Delta,Time):
if Delta>0:
return 1
else:
return exp(Delta/(ALPHA*Time+ep))
T=time()
N,M=map(int,input().split())
A=list(map(int,input().split()))
if N==M:
print(" ".join(map(str,A)))
sys.exit()
P=set(sample(range(N),M))
X=[]
Y=[]
R=0
for i in range(N):
if i in P:
X.append(A[i])
R^=A[i]
else:
Y.append(A[i])
t=time()-T
while t<TIME_LIMIT:
x=randint(0,M-1)
y=randint(0,N-M-1)
S=R^X[x]^Y[y]
if random()<=Probability(S-R,t):
R=S
X[x],Y[y]=Y[y],X[x]
t=time()-T
print(" ".join(map(str,X)))
Kazun