QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#327933#7881. Computational ComplexityHunsterRE 0ms0kbC++142.0kb2024-02-15 15:36:282024-02-15 15:36:29

Judging History

This is the latest submission verdict.

  • [2024-02-15 15:36:29]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2024-02-15 15:36:28]
  • Submitted

answer

#include <bits/stdc++.h>

using LL = long long;

constexpr LL inf64 = (LL)(1e18) + 18;
constexpr int h[] = {2, 3, 5, 7};
constexpr LL M = (LL)(1e15) + 15;

int f0, g0, T; LL mod;

std::vector<LL> vals, f, g, ef, eg;
void dfs(int i, LL v) {
    if (i == 4) {
        vals.push_back(v);
        return;
    }
    for (int j = 0; v < M; j++, v *= h[i])
        dfs(i + 1, v);
}
std::pair<LL, LL> query_f(LL v) {
    int p = std::upper_bound(vals.begin(), vals.end(), v) - vals.begin() - 1;
    return {f[p], ef[p]};
}
std::pair<LL, LL> query_g(LL v) {
    int p = std::upper_bound(vals.begin(), vals.end(), v) - vals.begin() - 1;
    return {g[p], eg[p]};
}

int main() {
    scanf("%d%d%d%lld", &f0, &g0, &T, &mod);
    vals.push_back(0);
    for (int i = 1; i <= 13; i++) dfs(0, i);
    std::sort(vals.begin(), vals.end());
    vals.resize(std::unique(vals.begin(), vals.end()) - vals.begin());
    f.resize(vals.size());
    g.resize(vals.size());
    f[0] = f0 % mod;
    g[0] = g0 % mod;
    ef[0] = f0;
    eg[0] = g0;
    for (int i = 1; i < vals.size(); i++) {
        LL t = vals[i];
        f[i] = (query_g(t / 2).first + query_g(t / 3).first + query_g(t / 5).first + query_g(t / 7).first) % mod;
        ef[i] = std::min(inf64, query_g(t / 2).second + query_g(t / 3).second + query_g(t / 5).second + query_g(t / 7).second);
        g[i] = (query_f(t / 2).first + query_f(t / 3).first + query_f(t / 4).first + query_f(t / 5).first) % mod;
        eg[i] = std::min(inf64, query_f(t / 2).second + query_f(t / 3).second + query_f(t / 4).second + query_f(t / 5).second) % mod;
        if (ef[i] <= 13) {
            ef[i] = std::max(t, ef[i]);
            f[i] = ef[i] % mod;
        }
        if (eg[i] <= 13) {
            eg[i] = std::max(t, eg[i]);
            g[i] = eg[i] % mod;
        }
    }
    while (T--) {
        LL n;
        scanf("%lld", &n);
        printf("%lld %lld\n", query_f(n).first, query_g(n).first);
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Runtime Error

input:

1958 920 10 100000000000
0
1
2
3
10
100
200
1000
19580920
20232023

output:


result: