結果
問題 |
No.916 Encounter On A Tree
|
ユーザー |
![]() |
提出日時 | 2021-05-05 08:43:11 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 64 ms / 2,000 ms |
コード長 | 830 bytes |
コンパイル時間 | 345 ms |
コンパイル使用メモリ | 82,392 KB |
実行使用メモリ | 76,740 KB |
最終ジャッジ日時 | 2024-09-12 23:03:04 |
合計ジャッジ時間 | 6,052 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 56 |
ソースコード
MOD = 10**9+7 N = 2**20+2 fac = [1]*N for i in range(2,N): fac[i] = fac[i-1]*i%MOD p2 = [1]*N for i in range(1,N): p2[i] = p2[i-1]*2%MOD d,l,r,k = map(int,input().split()) a = l.bit_length() b = r.bit_length() ans = 1 for i in range(1,d+1): if i != a and i != b: ans *= fac[1<<i-1] ans %= MOD if a==b: ans *= p2[a-1] ans %= MOD ans *= fac[(1<<a-1)-2] ans %= MOD if k%2: ans = 0 k //= 2 if 0 <= k <= a-1: ans *= p2[k-1] ans %= MOD else: ans = 0 else: ans *= fac[(1<<a-1)] ans %= MOD ans *= fac[(1<<b-1)-1] ans %= MOD c = b-a if (k-c)%2: ans = 0 k = (k-c)//2 if k==0: ans *= p2[c] ans %= MOD elif 0 <= k <= a-1: ans *= p2[c+k-1] ans %= MOD else: ans = 0 print(ans)