제출 #1332761

#제출 시각아이디문제언어결과실행 시간메모리
1332761model_codeStruktura (COCI26_struktura)C++20
110 / 110
1 ms344 KiB
#include <bits/stdc++.h>
using namespace std;

static const long long MOD = 1'000'000'007LL;

pair<long long, long long> fib_pair(long long n) {
    if (n == 0) return {0LL, 1LL};
    auto p = fib_pair(n >> 1);
    long long a = p.first;
    long long b = p.second;

    long long c = (a * ((2LL * b % MOD - a + MOD) % MOD)) % MOD;
    long long d = (a * a % MOD + b * b % MOD) % MOD;

    if (n & 1) {
        return {d % MOD, (c + d) % MOD};
    }
    return {c, d};
}

long long mod_pow(long long base, long long exp) {
    long long r = 1;
    base %= MOD;
    while (exp > 0) {
        if (exp & 1) r = r * base % MOD;
        base = base * base % MOD;
        exp >>= 1;
    }
    return r;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    long long n, k;
    if (!(cin >> n >> k)) return 0;

    if (k < n) {
        cout << 0 << '\n';
        return 0;
    }

    long long ways = fib_pair(n + 1).first;
    long long total = mod_pow(k, n);
    long long inv_total = mod_pow(total, MOD - 2);
    cout << ways * inv_total % MOD << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...