結果
| 問題 |
No.5022 XOR Printer
|
| コンテスト | |
| ユーザー |
yt142857
|
| 提出日時 | 2025-07-26 15:00:24 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,914 bytes |
| コンパイル時間 | 231 ms |
| コンパイル使用メモリ | 82,452 KB |
| 実行使用メモリ | 93,068 KB |
| スコア | 0 |
| 最終ジャッジ日時 | 2025-07-26 15:02:01 |
| 合計ジャッジ時間 | 97,050 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 50 |
ソースコード
import copy
import time
start_time = time.time()
def change(num):
re = []
for i in range(19,-1,-1):
if 2**i <= num:
num -= 2**i
re.append(1)
else:
re.append(0)
re.reverse()
return re
def go(s,g):
if s[0] < g[0]:
for i in range(g[0]-s[0]):
ans.append('D')
else:
for i in range(s[0]-g[0]):
ans.append('U')
if s[1] < g[1]:
for i in range(g[1]-s[1]):
ans.append('R')
else:
for i in range(s[1]-g[1]):
ans.append('L')
n,t = map(int,input().split())
al = []
ans = []
al_two = []
now_num = 0
for i in range(n):
s = [int(_) for _ in input().split()]
al.append(s)
other_s = []
for j in range(n):
other_s.append(change(s[j]))
al_two.append(other_s)
score = 0
for i in range(n):
for j in range(n):
score += al[i][j]
turn = 0
f_al = copy.deepcopy(al)
f_al_two = copy.deepcopy(al_two)
f_now_num = 0
f_score = score
max_score = 0
finaly_ans = 0
import random
while (time.time()-start_time)*1000 <= 1800:
ans = []
al = copy.deepcopy(f_al)
al_two = copy.deepcopy(f_al_two)
now_num = 0
score = f_score
turn = 0
for i in range(16,20):
pro = ((20-i)/10)**random.uniform(1.5,2.5)
best_node = (-1,-1)
best_node_num = float('inf')
for j in range(n):
for l in range(n):
next = change(now_num^al[j][l])
if next[i] == 1:
if al[j][l] < best_node_num:
best_node = (j,l)
best_node_num = al[j][l]
if turn+(best_node[0]+best_node[1]-2)*2+1 <= t:
go((0,0),best_node)
ans.append('C')
now_num = now_num^al[best_node[0]][best_node[1]]
go(best_node,(0,0))
turn += (best_node[0]+best_node[1])*2+1
now_node=(0,0)
for j in range(n):
for l in range(n):
if turn+abs(now_node[0]-j)+abs(now_node[1]-l)<=t:
if al[j][l]^now_num > al[j][l]:
go(now_node,(j,l))
turn = turn+abs(now_node[0]-j)+abs(now_node[1]-l)
now_node = (j,l)
if turn + 1 <= t:
turn += 1
ans.append('W')
score += ((al[j][l]^now_num)-al[j][l])
al[j][l] = (al[j][l]^now_num)
al_two[j][l] = change(al[j][l])
elif random.random() < ((19-i)/10)**2:
go(now_node,(j,l))
turn = turn+abs(now_node[0]-j)+abs(now_node[1]-l)
now_node = (j,l)
if turn + 1 <= t:
turn += 1
ans.append('W')
score += ((al[j][l]^now_num)-al[j][l])
al[j][l] = (al[j][l]^now_num)
al_two[j][l] = change(al[j][l])
if turn+now_node[0]+now_node[1] <= t:
turn += now_node[0]
turn += now_node[1]
go(now_node,(0,0))
else:
continue
if score > max_score:
max_score = score
finaly_ans = ans[:]
print(max_score)
for i in finaly_ans:
print(i)
yt142857