結果
| 問題 | 
                            No.5022 XOR Printer
                             | 
                    
| コンテスト | |
| ユーザー | 
                             yt142857
                         | 
                    
| 提出日時 | 2025-07-26 13:42:11 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 55 ms / 2,000 ms | 
| コード長 | 1,876 bytes | 
| コンパイル時間 | 231 ms | 
| コンパイル使用メモリ | 82,360 KB | 
| 実行使用メモリ | 63,896 KB | 
| スコア | 4,592,937,958 | 
| 最終ジャッジ日時 | 2025-07-26 13:42:17 | 
| 合計ジャッジ時間 | 5,162 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge1 / judge3 | 
| 純コード判定しない問題か言語 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 50 | 
ソースコード
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,m = 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)
now_score = 0
for i in range(n):
  for j in range(n):
    now_score += al[i][j]
turn = 0
for i in range(17,20):
  best_node = (-1,-1)
  best_node_num = float('inf')
  for j in range(n):
    for l in range(n):
      if al_two[j][l][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 <= 1000:
    go((0,0),best_node)
    ans.append('C')
    now_num = al[best_node[0]][best_node[1]]
#    print(now_num)
    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 al[j][l]^now_num > al[j][l] and turn+abs(now_node[0]-j)+abs(now_node[1]-l)<=1000:
          go(now_node,(j,l))
          turn = turn+abs(now_node[0]-j)+abs(now_node[1]-l)
          now_node = (j,l)
          if turn + 1 <= 1000:
            turn += 1
            ans.append('W')
            al[j][l] = al[j][l]^now_num
            al_two[j][l] = change(al[j][l])
    if turn+now_node[0]+now_node[1] <= 1000:
      turn += now_node[0]
      turn += now_node[1]
      go(now_node,(0,0))
  else:
    continue
#print(turn)
for i in ans:
  print(i)
            
            
            
        
            
yt142857