結果
| 問題 |
No.2727 Tetrahedron Game
|
| コンテスト | |
| ユーザー |
hitonanode
|
| 提出日時 | 2024-04-12 22:34:51 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 48 ms / 2,000 ms |
| コード長 | 1,481 bytes |
| コンパイル時間 | 970 ms |
| コンパイル使用メモリ | 95,504 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-10-02 23:31:57 |
| 合計ジャッジ時間 | 1,776 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 9 |
ソースコード
#include <iostream>
#include <string>
#include <vector>
using namespace std;
#define FOR(i, begin, end) for(int i=(begin),i##_end_=(end);i<i##_end_;i++)
#define IFOR(i, begin, end) for(int i=(end)-1,i##_begin_=(begin);i>=i##_begin_;i--)
#define REP(i, n) FOR(i,0,n)
#define IREP(i, n) IFOR(i,0,n)
constexpr int MD = 101;
constexpr int MD6 = MD * 6;
char solve() {
int N, K;
cin >> N >> K;
vector mat(3, vector<long long>(3));
vector<int> A(N);
string S;
for (auto &vec : mat) {
for (auto &x : vec) cin >> x;
}
for (auto &a : A) cin >> a;
cin >> S;
long long det = 0;
REP(i, 3) {
det += mat[0][i] * mat[1][(i + 1) % 3] * mat[2][(i + 2) % 3];
det -= mat[0][i] * mat[1][(i + 2) % 3] * mat[2][(i + 1) % 3];
}
if (det == 0) return 'D';
det = (max(det, -det) % MD6 + MD6) % MD6;
string dp(MD6, 'D');
REP(m, dp.size()) {
if (m % 6) continue;
dp.at(m) = ((m / 6) % MD >= K) ? 'K' : 'P';
}
IREP(i, A.size()) {
const char c = S.at(i);
auto dpprv = dp;
REP(m, dp.size()) {
const int nxtm = m * (A.at(i) + 1) % MD6;
if (dp.at(nxtm) == c) dpprv.at(m) = c;
if (dp.at(nxtm) == 'D' and dpprv.at(m) != c) dpprv.at(m) = 'D';
}
dp = dpprv;
}
return dp.at(det);
}
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int T;
cin >> T;
while (T--) cout << solve() << '\n';
}
hitonanode