結果
| 問題 | No.432 占い(Easy) |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-19 11:44:42 |
| 言語 | C++23(gcc16) (gcc 16.2.0 + boost 1.92.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 1,423 bytes |
| 記録 | |
| コンパイル時間 | 3,279 ms |
| コンパイル使用メモリ | 177,536 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-10-19 11:44:59 |
| 合計ジャッジ時間 | 4,107 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 11 WA * 10 |
ソースコード
#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;
for (char c : s) {
if (c > '0') {
cout << crt(_solve<mint1>(s), _solve<mint2>(s)) << "\n";
return;
}
}
cout << "0\n";
}
int main() {
using namespace std;
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) { solve(); }
}