結果
| 問題 |
No.916 Encounter On A Tree
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-04-14 21:11:41 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 183 ms / 2,000 ms |
| コード長 | 845 bytes |
| コンパイル時間 | 375 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 10,752 KB |
| 最終ジャッジ日時 | 2024-10-01 18:10:58 |
| 合計ジャッジ時間 | 6,202 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 56 |
ソースコード
MOD = 10 ** 9 + 7
INF = 10 ** 10
import sys
sys.setrecursionlimit(100000000)
dy = (-1,0,1,0)
dx = (0,1,0,-1)
def main():
d,l,r,k = map(int,input().split())
dl,dr = 0,0
while 2 ** (dl + 1) <= l:
dl += 1
while 2 ** (dr + 1) <= r:
dr += 1
if dr + dl - k < 0 or (dr + dl - k)%2 == 1 or dr - dl > k:
print(0)
return
lca = (dr + dl - k)//2
if dl == lca:
ans = pow(2,dl) * pow(2,dr - lca) % MOD
else:
ans = pow(2,dl) * pow(2,dr - lca - 1) % MOD
#print(dl,dr,lca,ans)
for i in range(d):
t = pow(2,i)
if i == dr and i == dl:
t -= 2
elif i == dr or i == dl:
t -= 1
for j in range(1,t + 1):
ans *= j
ans %= MOD
print(ans)
if __name__ =='__main__':
main()