結果
問題 |
No.5001 排他的論理和でランニング
|
ユーザー |
👑 ![]() |
提出日時 | 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)))