Submission #8557390
Source Code Expand
Copy
K, N = map(int, input().split())P = 10**9+7k = 70KK = 1<<knu = lambda L: int("".join([bin(KK+a)[-k:] for a in L[::-1]]), 2)st = lambda n: bin(n)[2:] + "0"li = lambda s: [int(a, 2) if len(a) else 0 for a in [s[-(i+1)*k-1:-i*k-1] for i in range(2*K-1)]]def mult(A, B):return li(st(nu(A) * nu(B)))def prod(A, B):C = mult(A, B)for i in range(len(C)):C[i] %= Pfor i in range(K+1, 2*K-1)[::-1]:C[i-1] += 2*C[i]C[i-K-1] -= C[i]C[i-1] %= PC[i-K-1] %= PC[i] = 0
K, N = map(int, input().split()) P = 10**9+7 k = 70 KK = 1<<k nu = lambda L: int("".join([bin(KK+a)[-k:] for a in L[::-1]]), 2) st = lambda n: bin(n)[2:] + "0" li = lambda s: [int(a, 2) if len(a) else 0 for a in [s[-(i+1)*k-1:-i*k-1] for i in range(2*K-1)]] def mult(A, B): return li(st(nu(A) * nu(B))) def prod(A, B): C = mult(A, B) for i in range(len(C)): C[i] %= P for i in range(K+1, 2*K-1)[::-1]: C[i-1] += 2*C[i] C[i-K-1] -= C[i] C[i-1] %= P C[i-K-1] %= P C[i] = 0 for i in range(K): C[i] += C[K] C[i] %= P C[K] = 0 return C[:K] def poww(A, n): if n == 1: return A if n % 2 == 0: return poww(prod(A, A), n//2) return prod(A, poww(A, n-1)) print(sum(poww([0,1], N-1))%P)
Submission Info
Submission Time | |
---|---|
Task | T - フィボナッチ |
User | Kiri8128 |
Language | Python (3.4.3) |
Score | 8 |
Code Size | 813 Byte |
Status | AC |
Exec Time | 241 ms |
Memory | 4556 KB |
Judge Result
Set Name | All | ||
---|---|---|---|
Score / Max Score | 8 / 8 | ||
Status |
|
Set Name | Test Cases |
---|---|
All | 00, 01, 02, 03, 04, 90, 91 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00 | AC | 241 ms | 4556 KB |
01 | AC | 164 ms | 4136 KB |
02 | AC | 229 ms | 4520 KB |
03 | AC | 97 ms | 3608 KB |
04 | AC | 52 ms | 3316 KB |
90 | AC | 18 ms | 3064 KB |
91 | AC | 18 ms | 3064 KB |