結果
| 問題 |
No.2772 Appearing Even Times
|
| コンテスト | |
| ユーザー |
hiromi_ayase
|
| 提出日時 | 2024-05-31 23:51:10 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 369 ms / 4,000 ms |
| コード長 | 1,143 bytes |
| コンパイル時間 | 6,080 ms |
| コンパイル使用メモリ | 314,636 KB |
| 実行使用メモリ | 84,480 KB |
| 最終ジャッジ日時 | 2024-12-21 01:51:23 |
| 合計ジャッジ時間 | 10,746 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using i32 = int;
using u32 = unsigned int;
using i64 = long long;
using u64 = unsigned long long;
#define FAST_IO \
ios::sync_with_stdio(false); \
cin.tie(0);
const i64 INF = 1001001001001001001;
using Modint = atcoder::static_modint<998244353>;
int main() {
FAST_IO
string N;
cin >> N;
int m = N.size();
int d = 10;
vector dp(m + 1, vector(2, vector(1 << d, Modint(0))));
for (int i = 0; i < m; i++) {
int c = N[i] - '0';
for (int x = 1; x < d; x++) {
if (i == 0) {
if (x < c) {
dp[i + 1][1][1 << x]++;
} else if (x == c) {
dp[i + 1][0][1 << x]++;
}
} else {
dp[i + 1][1][1 << c]++;
}
}
for (int k = 0; k < (1 << d); k++) {
for (int x = 0; x < c; x++) {
dp[i + 1][1][k ^ (1 << x)] += dp[i][0][k];
}
for (int x = 0; x < d; x++) {
dp[i + 1][1][k ^ (1 << x)] += dp[i][1][k];
}
dp[i + 1][0][k ^ (1 << c)] += dp[i][0][k];
}
}
Modint ans = dp[m][0][0] + dp[m][1][0];
cout << ans.val() << endl;
}
hiromi_ayase