Submission #98359
Source Code Expand
#include <cstdio> #include <vector> #include <algorithm> using namespace std; typedef long long ll; typedef vector<ll> Poly; const int MOD = 1000000007; Poly polyPower(const Poly& a, ll n) { int m = (int)a.size() - 1; Poly p(m + 1); p[0] = 1; for (int b = sizeof(ll) * 8 - __builtin_clzll(n) - 1; b >= 0; --b) { Poly q(2 * m, 0); int d = n >> b & 1; ll pm = 1; for (int i = 0; i < m; ++i) { for (int j = 0; j < m; ++j) { q[i + j + d] = (q[i + j + d] + p[i] * p[j]) % MOD; } pm += p[i]; } pm = pm % MOD * p[m] % MOD; for (int i = 2 * m - 1; i >= m; --i) { for (int j = 0; j < m; ++j) { q[i - m + j] = (q[i - m + j] + q[i] * a[j]) % MOD; } pm = (pm + q[i] * a[m]) % MOD; } for (int i = 0; i < m; ++i) { p[i] = q[i]; } p[m] = pm; } return p; } int main() { int K, N; scanf("%d%d", &K, &N); Poly a(K, 1); a.push_back(0); Poly ret = polyPower(a, N - 1); printf("%lld\n", accumulate(ret.begin(), ret.end(), 0LL) % MOD); return 0; }
Submission Info
Submission Time | |
---|---|
Task | T - フィボナッチ |
User | navi |
Language | C++11 (GCC 4.8.1) |
Score | 8 |
Code Size | 1238 Byte |
Status | AC |
Exec Time | 294 ms |
Memory | 1200 KB |
Compile Error
./Main.cpp: In function ‘int main()’: ./Main.cpp:43:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
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 | 294 ms | 1164 KB |
01 | AC | 186 ms | 1164 KB |
02 | AC | 294 ms | 1200 KB |
03 | AC | 73 ms | 1164 KB |
04 | AC | 109 ms | 1164 KB |
90 | AC | 31 ms | 1168 KB |
91 | AC | 31 ms | 1168 KB |