結果
| 問題 | No.916 Encounter On A Tree |
| コンテスト | |
| ユーザー |
mkawa2
|
| 提出日時 | 2019-10-27 09:15:01 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 258 ms / 2,000 ms |
| コード長 | 890 bytes |
| コンパイル時間 | 221 ms |
| コンパイル使用メモリ | 12,544 KB |
| 実行使用メモリ | 51,840 KB |
| 最終ジャッジ日時 | 2024-09-14 21:00:43 |
| 合計ジャッジ時間 | 17,528 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge6 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 56 |
ソースコード
import sys
sys.setrecursionlimit(10 ** 6)
input = sys.stdin.readline
def main():
md = 10 ** 9 + 7
d, l, r, k = map(int, input().split())
mx = pow(2, 20) + 5
fac = [1] * mx
for i in range(1, mx):
fac[i] = (fac[i - 1] * i) % md
d0 = d1 = 0
while l:
l //= 2
d0 += 1
while r:
r //= 2
d1 += 1
#print(d0, d1)
c = k - (d1 - d0)
if c < 0 or c % 2 or d0 - c // 2 < 1:
print(0)
exit()
h = k - c // 2
if c > 0: h -= 1
ans = 1
for i in range(d):
if i + 1 == d1:
w = pow(2, h, md)
if d0 == d1:
pw = pow(2, i, md)
ans = (ans * pw * w * fac[pw - 2]) % md
else:
ans = (ans * fac[pow(2, i, md) - 1] * w) % md
else:
ans = (ans * fac[pow(2, i, md)]) % md
print(ans)
main()
mkawa2