結果
| 問題 |
No.916 Encounter On A Tree
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-03-21 15:15:27 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 213 ms / 2,000 ms |
| コード長 | 807 bytes |
| コンパイル時間 | 134 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 31,616 KB |
| 最終ジャッジ日時 | 2024-09-19 01:39:24 |
| 合計ジャッジ時間 | 14,432 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 56 |
ソースコード
from bisect import bisect_left
MOD = 1000000000 + 7
d,l,r,k = map(int,input().split())
pow2 = []
acc = []
fac = []
pow2.append(1)
pow2.append(1)
for i in range(2,21):
pow2.append(pow2[-1]*2)
acc.append(0)
acc.append(1)
for i in range(2,21):
acc.append(acc[-1]+pow2[i])
fac.append(1)
fac.append(1)
for i in range(2,pow2[20]+1):
fac.append((fac[-1]*i)%MOD)
l = bisect_left(acc,l)
r = bisect_left(acc,r)
lca = -1
ans = 1
if l + r - k > 1 and (l + r -k)%2 == 0:
lca = (l + r -k) //2
if lca == -1 or lca > l or lca > r:
ans = 0
for i in range(1,d+1):
cnt = pow2[i]
if i == l:
cnt-=1
if i == r:
cnt-=1
ans *= fac[cnt]
ans %= MOD
if ans != 0:
ans *= pow2[lca]
ans %= MOD
ans *= pow2[l - lca]
ans %= MOD
ans *= pow2[r - lca]
ans %= MOD
ans *= 2
ans %= MOD
print(ans)