Submission #1137027

#TimeUsernameProblemLanguageResultExecution timeMemory
1137027sohamsen15Modsum (NOI12_modsum)C++20
25 / 25
4 ms1096 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;

vector<map<ll, ll>> c;
map<pll, ll> memo;

ll f(ll k, ll n) {
    if (memo.count({k, n})) return memo[{k, n}];
    if (n == 0) return c[n][k];
    ll ans = 0; 
    for (ll i = 0; i < 5; i++)
        ans += c[n][i] * f((5 + k - i) % 5, n - 1);
    memo[{k, n}] = ans;
    return ans;
}

ll g(ll n) {
    return 1 + (n * n * n * n + 2 * n * n) % 5;
}

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

    ll n; cin >> n; c.resize(n);
    vector<ll> v(n), w(n);
    for (ll i = 0; i < n; i++) cin >> v[i] >> w[i];

    for (ll i = 0; i < n; i++)
        for (ll j = 0; j < 5; j++)
            c[i][j] = 0;

    for (ll i = 0; i < n; i++) 
        for (ll j = v[i]; j <= w[i]; j++) 
            c[i][j % 5]++;

    ll ans = 0;
    for (ll i = 0; i < 5; i++)
        ans += f(i, n - 1) * g(i);

    cout << ans;
}
#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...