Submission #53674275


Source Code Expand

//#pragma GCC optimize("Ofast")
//#pragma GCC target("avx,avx2,fma")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,sse4a,avx,avx2,popcnt,tune=native")
#include <bits/stdc++.h>
 
using namespace std;
 
#define all(v) (v).begin(), (v).end()
#define sz(a) ((long long)(a).size())
#define X first
#define Y second
 
using ll = long long;
using ull = unsigned long long;
using dbl = long double;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll myRand(ll myRandMod) {
    return (ull)rng() % myRandMod;
}
 
const ll INF = 1e9;
const ll LINF = 1e18;
const int MOD = 998244353;
const int MAXN = 4e5 + 555;


ll pw(ll x, ll y) {
    if (y == 0) {
        return 1;
    }
    if (y & 1) {
        return x * pw(x, y - 1) % MOD;
    } else {
        return pw(x * x % MOD, y / 2);
    }
}

ll inv2 = pw(2, MOD - 2);

ll calc_sum(ll x, ll y) {
    return ((x + y) * (y - x + 1) % MOD * inv2 % MOD + MOD) % MOD;
}

vector<ll> a(4);
ll ans;

void solve1() {
    ll val0 = pw(10, a[1]);
    ll val1 = pw(10, a[1] + 1);
    if (a[2] != a[1]) {
        ans = calc_sum(val0, (val1 + MOD - 1) % MOD);
    } else {
        ans = calc_sum(val0, (val1 - val0 + MOD) % MOD);
        ans = (ans + (val1 - val0) * (val0 - 1) % MOD + MOD) % MOD;
    }
}

void solve0() {
    solve1();

    ll val0 = pw(10, a[1]);
    ll val1 = pw(10, a[1] + 1);

    ll val2 = pw(10, a[2]);
    ll val3 = pw(10, a[2] + 1);

    ans = ((val1 - val0 + MOD) * (val3 - val2 + MOD) % MOD - ans + MOD) % MOD;
}
 
void solve() {
    cin >> a[1] >> a[2] >> a[3];
    if (a[2] < a[1]) {
        swap(a[1], a[2]);
    }
    for (int i = 1; i <= 3; ++i) {
        --a[i];
    }
    ans = 0;
    if (a[3] == a[2] + 1) {
        solve1();
    } else if (a[3] == a[2]) {
        solve0();
    }
    cout << ans << "\n";
}
 
signed main() {
#ifdef LOCAL
    assert(freopen("in.txt", "r", stdin));
    assert(freopen("out.txt", "w", stdout));
#endif
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(20);
 
    int T = 1;
    cin >> T;
    for (int numt = 0; numt < T; ++numt) {
        solve();
    }
 
#ifdef LOCAL
    cout << endl << endl << "time = " << clock() / (double)CLOCKS_PER_SEC << endl;
#endif
}

Submission Info

Submission Time
Task B - 1 + 6 = 7
User mHuman
Language C++ 20 (gcc 12.2)
Score 600
Code Size 2335 Byte
Status AC
Exec Time 122 ms
Memory 3540 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 1
AC × 10
Set Name Test Cases
Sample 01-sample-01.txt
All 01-sample-01.txt, 02-min-01.txt, 03-max-01.txt, 04-rand-A-01.txt, 05-rand-B-01.txt, 06-rand-C-01.txt, 06-rand-C-02.txt, 06-rand-C-03.txt, 06-rand-C-04.txt, 07-near-01.txt
Case Name Status Exec Time Memory
01-sample-01.txt AC 1 ms 3392 KiB
02-min-01.txt AC 14 ms 3540 KiB
03-max-01.txt AC 22 ms 3480 KiB
04-rand-A-01.txt AC 90 ms 3472 KiB
05-rand-B-01.txt AC 20 ms 3484 KiB
06-rand-C-01.txt AC 57 ms 3476 KiB
06-rand-C-02.txt AC 121 ms 3320 KiB
06-rand-C-03.txt AC 59 ms 3488 KiB
06-rand-C-04.txt AC 122 ms 3540 KiB
07-near-01.txt AC 33 ms 3476 KiB