結果
| 問題 |
No.2783 4-33 Easy
|
| コンテスト | |
| ユーザー |
Tatsu_mr
|
| 提出日時 | 2024-06-14 22:23:51 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 43 ms / 2,000 ms |
| コード長 | 2,262 bytes |
| コンパイル時間 | 4,575 ms |
| コンパイル使用メモリ | 269,272 KB |
| 最終ジャッジ日時 | 2025-02-21 22:09:59 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
using mint = modint998244353;
int main() {
int n;
cin >> n;
vector<int> a(n);
vector<string> b(n);
set<int> s;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < n; i++) {
cin >> b[i];
if (b[i].back() == 'X') {
s.insert(i);
}
}
vector<tuple<int, int, bool>> p;
for (int i = 0; i < n; i++) {
if (!s.count(i)) {
p.push_back({a[i], stoi(b[i]), false});
}
}
for (int i : s) {
int sz = b[i].size();
int num = (sz > 1 ? stoi(b[i].substr(0, sz - 1)) : 0);
p.push_back({a[i], num, true});
}
vector<vector<vector<vector<mint>>>> dp(n + 1, vector<vector<vector<mint>>>(10, vector<vector<mint>>(5, vector<mint>(35))));
dp[0][0][0][0] = mint(1);
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= 9; j++) {
for (int k = 0; k <= 4; k++) {
for (int l = 0; l <= 34; l++) {
dp[i][j][k][l] += dp[i - 1][j][k][l];
auto [u, d, x] = p[i - 1];
if (j == 0) {
continue;
}
if (k - u < 0 || l - d < 0) {
continue;
}
if (1 <= j && j <= 8 && x == false) {
dp[i][j][k][l] += dp[i - 1][j - 1][k - u][l - d];
} else if (j == 9) {
if (x == false) {
if (k >= l) {
dp[i][j][k][l] += dp[i - 1][j - 1][k - u][l - d];
}
} else {
if (k < l) {
if (d == 0 || (d > 0 && k >= l - 4)) {
dp[i][j][k][l] += dp[i - 1][j - 1][k - u][l - d];
}
}
}
}
}
}
}
}
cout << dp[n][9][4][33].val() << endl;
}
Tatsu_mr