結果
| 問題 |
No.2727 Tetrahedron Game
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-04-17 10:14:51 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 75 ms / 2,000 ms |
| コード長 | 1,127 bytes |
| コンパイル時間 | 2,156 ms |
| コンパイル使用メモリ | 197,036 KB |
| 最終ジャッジ日時 | 2025-02-21 02:46:51 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 9 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int L = 606;
void solve() {
int N, K;
cin >> N >> K;
int now; ll r;
{
ll pnow[3][3];
for (int i = 0; i < 3; i ++) {
for (int j = 0; j < 3; j ++) {
cin >> pnow[i][j];
}
}
r = 0;
for (int i = 1; i < 3; i ++) {
for (int ofs = 0; ofs < 3; ofs ++) {
ll kj = 1;
for (int j = 0; j < 3; j ++) {
kj *= pnow[j][(ofs + i * j) % 3];
}
r += kj * (i & 1 ? 1ll : -1ll);
}
}
now = abs(r) % L;
}
std::vector<int> A(N); string s;
for (auto& a : A) cin >> a;
cin >> s;
int dp[L];
for (int i = 0; i < L; i ++) {
if (i % 6) {
dp[i] = 0;
} else {
dp[i] = (((i / 6) % 101) >= K ? 1 : -1);
}
}
for (int i = N - 1; i >= 0; i --) {
int dp2[L];
for (int p = 0; p < L; p ++) {
int x = dp[p], y = dp[(p * (A[i] + 1)) % L];
dp2[p] = (s[i] == 'K' ? max(x, y) : min(x, y));
}
for (int i = 0; i < L; i ++) dp[i] = dp2[i];
}
if (r == 0) {
puts("D");
return;
}
cout << (dp[now] == -1 ? "P" : (dp[now] ? "K" : "D")) << endl;
}
int main () {
int T;
cin >> T;
while (T--) solve();
}