結果

問題 No.432 占い(Easy)
コンテスト
ユーザー himueu
提出日時 2026-10-19 11:40:31
言語 C++23(gcc16)
(gcc 16.2.0 + boost 1.92.0 + ACL)
コンパイル:
g++-16 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,314 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,431 ms
コンパイル使用メモリ 177,696 KB
実行使用メモリ 6,400 KB
最終ジャッジ日時 2026-10-19 11:40:40
合計ジャッジ時間 3,555 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3 WA * 1
other AC * 3 WA * 18
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <atcoder/modint>
#include <iostream>
#include <vector>

int crt(int a, int b) {
    constexpr int MOD1 = 998244353, MOD2 = 1000000007;
    const long long inv = atcoder::modint1000000007(MOD1).inv().val();
    long long t = (inv * (b - a) % MOD2 + MOD2) % MOD2;
    int res = (t * MOD1 + a) % 9;
    return (res > 0) ? res : 9;
}

template <typename mint>
int _solve(std::string s) {
    using namespace std;
    int n = s.size();
    vector<mint> fac(n), ifac(n);
    fac[0] = 1;
    for (int i = 0; i < n - 1; i++) { fac[i + 1] = fac[i] * (i + 1); }
    ifac[n - 1] = fac[n - 1].inv();
    for (int i = n - 2; i >= 0; i--) { ifac[i] = ifac[i + 1] * (i + 1); }

    auto comb = [&](int n, int r) -> mint {
        if (n < 0 || r < 0 || n < r) { return mint(0); }
        return fac[n] * ifac[r] * ifac[n - r];
    };

    mint res = 0;
    for (int i = 0; i < n; i++) { res += comb(n - 1, i) * (s[i] - '0'); }
    return res.val();
}

void solve() {
    using namespace std;
    using mint1 = atcoder::modint998244353;
    using mint2 = atcoder::modint1000000007;
    string s;
    cin >> s;
    cout << crt(_solve<mint1>(s), _solve<mint2>(s)) << "\n";
}

int main() {
    using namespace std;
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--) { solve(); }
}
0