結果
| 問題 |
No.1589 Bit Vector
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-07-09 01:19:54 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 54 ms / 2,000 ms |
| コード長 | 2,102 bytes |
| コンパイル時間 | 146 ms |
| コンパイル使用メモリ | 82,516 KB |
| 実行使用メモリ | 65,832 KB |
| 最終ジャッジ日時 | 2024-07-01 13:48:33 |
| 合計ジャッジ時間 | 3,545 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 35 |
ソースコード
import sys,random,bisect
from collections import deque,defaultdict
from heapq import heapify,heappop,heappush
from itertools import permutations
from math import gcd,log
input = lambda :sys.stdin.readline().rstrip()
mi = lambda :map(int,input().split())
li = lambda :list(mi())
def update_ai_by_aj(i,j):
res = ["UPD {} {}".format(i,1),"AND {} {} {}".format(i,i,j)]
return res
def update_by_bool(b,i,j):
"""
・b:Trueならaiをajでupdate
・b,jは破壊してok
・a_i←a_i(1-b)+a_j=a_i^(a_i&b)^(a_j&b)
"""
res = []
res.append("AND {} {} {}".format(j,b,j))
res.append("AND {} {} {}".format(b,b,i))
res.append("XOR {} {} {}".format(i,i,j))
res.append("XOR {} {} {}".format(i,i,b))
return res
N,K = mi()
res = []
"""
加算 XORで桁 ANDで繰り上がり
2個の処理以外はAND_regiに繰り上がりをメモ
"""
res.append("AND {} {} {}".format(N,0,1))
res.append("XOR {} {} {}".format(0,0,1))
res += update_ai_by_aj(1,N)
res.append("UPD {} {}".format(N,0))
up_memo = N
AND_regi = 2
for b in range(2,N):
if b+1 == 1<<AND_regi:
AND_regi += 1
res.append("AND {} {} {}".format(up_memo,0,b))
res.append("XOR {} {} {}".format(0,0,b))
for i in range(1,AND_regi):
res.append("AND {} {} {}".format(AND_regi,up_memo,i))
res.append("XOR {} {} {}".format(i,up_memo,i))
res += update_ai_by_aj(up_memo,AND_regi)
"""
初期化
"""
res.append("UPD {} {}".format(AND_regi,0))
res.append("UPD {} {}".format(N,0))
if N==2:
if K==1:
res.append("XOR {} {} {}".format(2,0,1))
else:
res += update_ai_by_aj(2,1)
else:
assert AND_regi!=N
"""
下の桁から比較
AND_regiに両方の整数のi桁目のXORを記録
XOR=0なら更新しない
XOR=1ならaiで更新
"""
for i in range(AND_regi):
res.append("UPD {} {}".format(AND_regi,(K-1)>>i & 1))
res.append("XOR {} {} {}".format(AND_regi,i,AND_regi))
res += update_by_bool(AND_regi,N,i)
res.append("UPD {} {}".format(AND_regi,0))
print(len(res))
print(*res,sep="\n")