結果
問題 | No.911 ラッキーソート |
ユーザー |
|
提出日時 | 2021-05-06 09:53:23 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 297 ms / 2,000 ms |
コード長 | 982 bytes |
コンパイル時間 | 223 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 37,528 KB |
最終ジャッジ日時 | 2024-09-14 02:44:13 |
合計ジャッジ時間 | 10,594 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 46 |
ソースコード
N, L, R = map(int, input().split())A = tuple(map(int, input().split()))table = [None] * 61def is_impossible(flag):if flag: print(0);exit()def set_table(x, q):if table[x] is None:table[x] = qelse:is_impossible(table[x] != q)for i in range(N - 1):diff = A[i + 1] - A[i]x = A[i + 1] ^ A[i]is_impossible(diff == 0)if diff > 0:set_table(x.bit_length() - 1, 0)elif diff < 0:set_table(x.bit_length() - 1, 1)def f(x):if x < 0: return 0dp_same, dp_smaller = 1, 0for i in range(60, -1, -1):t = table[i]if (x >> i) & 1:if t is None:dp_smaller = dp_same + dp_smaller * 2elif t == 0:dp_same, dp_smaller = 0, dp_same + dp_smallerelse:if t is None:dp_smaller *= 2elif t == 1:dp_same = 0return dp_same + dp_smallerprint(f(R) - f(L - 1))