結果
| 問題 |
No.2819 Binary Binary-Operator
|
| コンテスト | |
| ユーザー |
navel_tos
|
| 提出日時 | 2024-07-27 01:53:14 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 74 ms / 2,000 ms |
| コード長 | 1,291 bytes |
| コンパイル時間 | 691 ms |
| コンパイル使用メモリ | 82,036 KB |
| 実行使用メモリ | 71,196 KB |
| 平均クエリ数 | 3.00 |
| 最終ジャッジ日時 | 2024-07-27 01:53:24 |
| 合計ジャッジ時間 | 8,413 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 64 |
ソースコード
#yukicoder 2819 Binary Binary-Operator
#入力(X, Y)とPのパターン、合計2^6通りを区別できるような列を考えたい
#隠された演算子2^4通りを定義 P[i][x][y]: i番目のx * yの結果
P = [[[0] * 2 for _ in range(2)] for i in range(1 << 4)]
has_bit = lambda S, x: S >> x & 1
for S in range(1 << 4):
for i, (x, y) in enumerate([(0, 0), (0, 1), (1, 0), (1, 1)]):
if has_bit(S, i):
P[S][x][y] = 1
#演算子番号iと演算列Lを渡す。演算結果を返す
def calc(i, L):
ans = L[0]
for x in range(1, len(L)):
ans = P[i][ans][L[x]]
return ans
#X, Yを与える。すべての演算子でX * Yの結果が一致するような列L: [X, Y, ・・・]を探す
def find(X, Y):
for N in range(3, 16):
L = [X, Y] + [0] * (N - 2)
for S in range(1 << (N - 2)):
for x in range(N - 2):
if has_bit(S, x):
L[2 + x] = 1
for i in range(1 << 4):
ans1 = P[i][X][Y]
ans2 = calc(i, L)
if ans1 != ans2:
break
else:
return L
#驚いたが実行してみる
X, Y = map(int, input().split())
L = find(X, Y)
print(len(L))
print(*L)
exit(print(input()))
navel_tos