結果
| 問題 |
No.911 ラッキーソート
|
| コンテスト | |
| ユーザー |
mkawa2
|
| 提出日時 | 2019-11-02 16:49:27 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,055 bytes |
| コンパイル時間 | 255 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 142,816 KB |
| 最終ジャッジ日時 | 2024-09-14 23:14:03 |
| 合計ジャッジ時間 | 22,676 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 5 WA * 5 TLE * 9 -- * 27 |
ソースコード
import sys
sys.setrecursionlimit(10 ** 6)
input = sys.stdin.readline
int1 = lambda x: int(x) - 1
p2D = lambda x: print(*x, sep="\n")
def main():
max_k = 60
n, l, r = map(int, input().split())
aa = list(map(int, input().split()))
#for a in aa:
#print(format(a, "b"))
aadig = [[] for _ in range(max_k)]
for a in aa:
for j in range(max_k - 1, -1, -1):
aadig[max_k - 1 - j].append((a >> j) & 1)
#p2D(aadig)
ans_dig = [-1] * max_k
sep = set([n])
for k in range(max_k):
nsep = set()
pi = 0
flag_k = -1
for si in sorted(sep):
flag_sep = -1
st = aadig[k][pi]
for i in range(pi, si):
d = aadig[k][i]
if flag_sep == d:
print(0)
exit()
if d == 1 - st:
flag_sep = st
st = d
nsep.add(i)
if flag_sep > -1:
if flag_k > -1 and flag_k != flag_sep:
print(0)
exit()
else:
flag_k = flag_sep
pi = si
else:
sep |= nsep
ans_dig[k] = flag_k
#print(format(l, "b"))
#print(format(r, "b"))
#print(ans_dig)
dp = [[[0] * 2 for _ in range(2)] for _ in range(max_k + 1)]
dp[0][0][0] = 1
for k in range(max_k):
lk = l >> (max_k - 1 - k) & 1
rk = r >> (max_k - 1 - k) & 1
for b in range(2):
for s in range(2):
pre = dp[k][b][s]
if pre == 0: continue
nb, ns = b, s
if ans_dig[k] != 1 and (s == 1 or lk == 0):
if rk == 1: nb = 1
dp[k + 1][nb][ns] += pre
nb = b
if ans_dig[k] != 0 and (b == 1 or rk == 1):
if lk == 0: ns = 1
dp[k + 1][nb][ns] += pre
print(sum(dp[max_k][0]) + sum(dp[max_k][1]))
#p2D(dp)
main()
mkawa2