Submission #464357

#TimeUsernameProblemLanguageResultExecution timeMemory
464357tengiz05Rack (eJOI19_rack)C++17
100 / 100
20 ms15436 KiB
#include <bits/stdc++.h>

using i64 = long long;

constexpr int P = 1000000007;

constexpr i64 inf = 2e18;

int norm(int x) {
    if (x < 0) x += P;
    if (x >= P) x -= P;
    return x;
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    i64 n, k;
    std::cin >> n >> k;
    k--;
    
    std::vector<i64> mpw(n + 1, 1), pw(n + 1, 1);
    for (int i = 1; i <= n; i++) {
        mpw[i] = mpw[i - 1] * 2 % P;
        pw[i] = std::min(pw[i - 1] * 2, inf);
    }
    
    int ans = 0;
    for (int i = 0; i < n; i++) {
        if (k >= pw[n - i - 1]) {
            ans = norm(ans + mpw[i]);
            k -= pw[n - i - 1];
        }
    }
    
    std::cout << norm(ans + 1) << "\n";
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...