Submission #73979622


Source Code Expand

// https://atcoder.jp/contests/abc448/tasks/abc448_e
// Sat 07 Mar 2026 09:33:20 PM JST
#include <bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
// using mint = modint998244353;
// using mint = modint1000000007;
// using vmint = vector<mint>;
// #include <boost/multiprecision/cpp_int.hpp>
// using namespace boost::multiprecision;
// using int128 = int128_t;
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define rep(i, n) for (long long int i = 0; i < (n); ++i)
#define rep2(i, k, n) for (long long int i = (k); i < (n); ++i)
#define pb push_back
using ll = long long;
using vint = vector<int>;
using vll = vector<ll>;
using vvint = vector<vector<int>>;
using vvll = vector<vector<ll>>;

const ll INF = (ll)2e18 + 9;
// const int INF = (int)2e9 + 7;

template <typename T>
bool chmin(T& a, T b) {
    bool change = a > b;
    a = min(a, b);
    return change;
}
template <typename T>
bool chmax(T& a, T b) {
    bool change = a < b;
    a = max(a, b);
    return change;
}

template <typename T>
void print(vector<T> v) {
    int n = v.size();
    rep(i, n) {
        if (i == 0)
            cout << v[i];
        else
            cout << ' ' << v[i];
    }
    cout << endl;
}

template <typename T>
void vprint(vector<T> v) {
    for (auto x : v) cout << x << '\n';
}

void yesno(bool x) { cout << (x ? "Yes" : "No") << '\n'; }

void Yes() { yesno(true); }

void No() { yesno(false); }

// ceil(a/b)
ll ceil(ll a, ll b) { return (a + b - 1) / b; }

// floor(a/b)
ll floor(ll a, ll b) { return a / b; }

void solve();

int main() {
    solve();
    return 0;
}

ll modpow(ll x, ll n, ll mod) {
    long long ret = 1;
    while (n > 0) {
        if (n & 1)
            ret = (ret * x) % mod;
        x = (x * x) % mod;
        n >>= 1;
    }
    return ret;
}

struct Repunit {
    ll mod;
    int up = 32;
    vll d;  // d[i]: (1 が 2^i 個並んだ数字) % mod

    Repunit(ll mod) : mod(mod) {
        d.resize(up);
        d[0] = 1 % mod;
        rep2(i, 1, up) {
            d[i] = d[i - 1] * modpow(10, 1ll << (i - 1), mod) + d[i - 1];
            d[i] %= mod;
        }
    }

    // (1 が n 個並んだ数) % mod
    ll cal(ll n) {
        ll ret = 0;
        rep(i, up) {
            if (n >> i & 1) {
                ret *= modpow(10, 1ll << i, mod);
                ret += d[i];
                ret %= mod;
            }
        }
        return ret;
    }
};

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    ll K, M;
    cin >> K >> M;

    vll C(K), L(K);
    rep(i, K) cin >> C[i] >> L[i];

    auto cal = [&](ll mod) -> ll {
        Repunit repunit(mod);

        ll r = 0;
        rep(i, K) {
            r *= modpow(10, L[i], mod);
            r += (C[i] * repunit.cal(L[i]));
            r %= mod;
        }

        return r;
    };

    // 10007 は素数
    ll mod = 10007;
    ll r = cal(M);
    ll n = cal(mod);

    modint::set_mod(mod);
    using mint = modint;

    mint mr = mint(r), mn = mint(n);
    cout << ((mn - mr) * mint(M).inv()).val() << endl;
}

Submission Info

Submission Time
Task E - Simple Division
User goropikari
Language C++23 (GCC 15.2.0)
Score 450
Code Size 3239 Byte
Status AC
Exec Time 233 ms
Memory 5068 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 450 / 450
Status
AC × 3
AC × 43
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt
Case Name Status Exec Time Memory
hand_01.txt AC 1 ms 3568 KiB
hand_02.txt AC 1 ms 3696 KiB
hand_03.txt AC 1 ms 3548 KiB
hand_04.txt AC 1 ms 3556 KiB
hand_05.txt AC 1 ms 3696 KiB
sample_01.txt AC 1 ms 3636 KiB
sample_02.txt AC 1 ms 3604 KiB
sample_03.txt AC 1 ms 3532 KiB
test_01.txt AC 1 ms 3644 KiB
test_02.txt AC 233 ms 4952 KiB
test_03.txt AC 232 ms 4912 KiB
test_04.txt AC 205 ms 4896 KiB
test_05.txt AC 204 ms 4844 KiB
test_06.txt AC 204 ms 4924 KiB
test_07.txt AC 206 ms 4996 KiB
test_08.txt AC 205 ms 4992 KiB
test_09.txt AC 204 ms 4844 KiB
test_10.txt AC 206 ms 4964 KiB
test_11.txt AC 205 ms 4908 KiB
test_12.txt AC 205 ms 4924 KiB
test_13.txt AC 205 ms 4844 KiB
test_14.txt AC 204 ms 4908 KiB
test_15.txt AC 208 ms 5068 KiB
test_16.txt AC 205 ms 4912 KiB
test_17.txt AC 204 ms 4964 KiB
test_18.txt AC 204 ms 5056 KiB
test_19.txt AC 206 ms 5024 KiB
test_20.txt AC 205 ms 4952 KiB
test_21.txt AC 206 ms 4888 KiB
test_22.txt AC 205 ms 4976 KiB
test_23.txt AC 206 ms 4844 KiB
test_24.txt AC 205 ms 5056 KiB
test_25.txt AC 204 ms 4896 KiB
test_26.txt AC 205 ms 4896 KiB
test_27.txt AC 204 ms 5068 KiB
test_28.txt AC 205 ms 4996 KiB
test_29.txt AC 206 ms 4964 KiB
test_30.txt AC 205 ms 5052 KiB
test_31.txt AC 205 ms 5052 KiB
test_32.txt AC 206 ms 4996 KiB
test_33.txt AC 204 ms 5024 KiB
test_34.txt AC 206 ms 4996 KiB
test_35.txt AC 205 ms 4996 KiB