結果
| 問題 | No.2807 Have Another Go (Easy) |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-03-23 11:21:59 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 45 ms / 3,000 ms |
| コード長 | 1,217 bytes |
| 記録 | |
| コンパイル時間 | 1,240 ms |
| コンパイル使用メモリ | 164,332 KB |
| 実行使用メモリ | 19,180 KB |
| 最終ジャッジ日時 | 2026-03-23 11:22:04 |
| 合計ジャッジ時間 | 4,284 ms |
|
ジャッジサーバーID (参考情報) |
judge1_1 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 46 |
ソースコード
#include <iostream>
#include <vector>
using namespace std;
const int MOD = 998244353;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M, k;
cin >> N >> M >> k;
vector<int> C(k);
for (int i = 0; i < k; ++i) {
cin >> C[i];
}
int twoN = 2 * N;
vector<long long> f(twoN);
f[0] = 1;
for (int x = 1; x < twoN; ++x) {
f[x] = 0;
for (int d = 1; d <= 6; ++d) {
if (x - d >= 0) {
f[x] += f[x - d];
}
}
f[x] %= MOD;
}
vector<long long> A(twoN, 0);
for (int t = 0; t < twoN; ++t) {
for (int d = 0; d < 6; ++d) {
int x = twoN - 6 + d;
if (x >= t) {
int s = x - t;
A[t] = (A[t] + (long long)(d + 1) * f[s]) % MOD;
}
}
}
long long fN = f[N];
for (int i = 0; i < k; ++i) {
int c = C[i];
long long term1 = (f[c] * A[c]) % MOD;
long long ki = (f[c + N] - (f[c] * fN) % MOD + MOD) % MOD;
long long term2 = (ki * A[c + N]) % MOD;
long long ans = (term1 + term2) % MOD;
cout << ans << '\n';
}
return 0;
}
vjudge1