結果
問題 | No.2819 Binary Binary-Operator |
ユーザー |
![]() |
提出日時 | 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()))