Submission #74256174


Source Code Expand

#include <bits/stdc++.h>
#include <cassert>
#define print(vec) print_v(#vec, vec)
#define debug(x) cout << #x << ": " << x << endl
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7;
ll qpow(ll x, ll k) {
    ll res = 1;
    while(k) {
        if(k & 1ll) res = res * x % mod;
        x = x * x % mod, k >>= 1;
    }
    return res;
}

template<typename T>
void print_v(string name, const vector<T>& vec) {
    cout << name << ": " << endl;
    for(auto v: vec) cout << v << ' ';
    cout << endl;
}

ll kitamasa(const vector<ll>& coef, const vector<ll>& a, ll n) {
    if(n < (int)a.size()) return a[n];

    int k = coef.size();
    assert(k != 0);

    auto compose = [&](const vector<ll>& A, const vector<ll>& _B) -> vector<ll> {
        // print(A);
        // print(_B);
        // debug(k);

        vector<ll> B = _B;
        vector<ll> C(k);
        for(auto v: A) {
            for(int j = 0; j < k; j++) (C[j] += v * B[j] % mod) %= mod;

            ll back = B.back();
            for(int j = k - 1; j >= 1; j--)
                B[j] = (B[j - 1] + back * coef[j] % mod) % mod;
            B[0] = back * coef[0] % mod;
        }

        // print(C);

        return C;
    };

    vector<ll> res_c(k), c(k);
    res_c[0] = 1, c[1] = 1;
    while(n) {
        if(n & 1ll) res_c = compose(res_c, c);
        n >>= 1, c = compose(c, c);
    }
    ll res = 0;
    for(int j = 0; j < k; j++) (res += res_c[j] * a[j] % mod) %= mod;
    return res;
}
void solve() {
    int k; ll n;
    cin >> k >> n;
    cout << kitamasa(vector(k, 1ll), vector(k, 1ll), n - 1) << endl;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    // freopen("A.in", "r", stdin);
    // freopen("A.out", "w", stdout);
    int T = 1;
    // cin >> T;
    while(T--) solve();
}

Submission Info

Submission Time
Task T - フィボナッチ
User dk_qwq
Language C++23 (GCC 15.2.0)
Score 8
Code Size 1884 Byte
Status AC
Exec Time 155 ms
Memory 3812 KiB

Judge Result

Set Name All
Score / Max Score 8 / 8
Status
AC × 7
Set Name Test Cases
All 00, 01, 02, 03, 04, 90, 91
Case Name Status Exec Time Memory
00 AC 155 ms 3812 KiB
01 AC 80 ms 3680 KiB
02 AC 140 ms 3804 KiB
03 AC 24 ms 3720 KiB
04 AC 1 ms 3648 KiB
90 AC 1 ms 3688 KiB
91 AC 1 ms 3520 KiB