結果
| 問題 |
No.2653 [Cherry 6th Tune] Re: start! (Make it Zero!)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-03-01 20:46:59 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 80 ms / 2,000 ms |
| コード長 | 1,219 bytes |
| コンパイル時間 | 3,038 ms |
| コンパイル使用メモリ | 252,908 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-09-29 13:16:18 |
| 合計ジャッジ時間 | 11,273 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 72 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/modint.hpp>
#define reps(i, n) for (int i = 1, i##_len = (n); i <= i##_len; ++i)
using namespace std;
using namespace atcoder;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int Q;
cin >> Q;
while (Q--) {
int n, m;
cin >> n >> m;
using mint = modint;
mint::set_mod(m);
using mint998 = modint998244353;
vector<mint> a(n + 1);
vector<int> b(n + 1);
reps(i, n) {
int x;
cin >> x;
if (x != -1) a[i] = x;
else b[i] = 1;
}
auto ca = a;
auto cb = b;
reps(i, n) ca[i] += ca[i - 1];
reps(i, n) cb[i] += cb[i - 1];
mint998 ans = ((cb[n] == 0) ? (ca[n] == 0) : mint998(m).pow(cb[n] - 1)) * (n - 1);
reps(i, n - 1) {
mint lSum = ca[i], rSum = ca[n] - lSum;
int lCnt = cb[i], rCnt = cb[n] - lCnt;
mint998 lNum = (lCnt == 0) ? (lSum == 0) : mint998(m).pow(lCnt - 1);
mint998 rNum = (rCnt == 0) ? (rSum == 0) : mint998(m).pow(rCnt - 1);
ans -= lNum * rNum;
}
cout << ans.val() << endl;
}
return 0;
}