| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38672 | 沈仲恩 | 【J】T3 | C++ | 解答错误 | 49 | 4 MS | 344 KB | 1199 | 2025-10-18 15:40:41 |
#include <bits/stdc++.h> #define ctr(x) if (x){f[l][r]=1;continue;} #define ctb(x) if (x){f[l][r]=1;break;} using namespace std; bool f[305][305]; int n; char s[305]; signed main() { int _; scanf("%d", &_); while (_--) { scanf("%d", &n); scanf("%s", s + 1); for (int i = 1; i <= n; i++) f[i][i - 1] = 1; for (int len = 2; len <= n; len++) { for (int l = 1, r = len; r <= n; l++, r++) { f[l][r] = 0; if (s[l] == s[r]) { ctr(f[l + 1][r - 1]); if (len >= 3) { ctr(f[l + 1][r - 2]); ctr(f[l + 2][r - 1]); } } for (int k = l + 1; k <= r - 2; k++) { ctb(f[l][k] && f[k + 1][r]); if (s[l] == s[r]) ctb(f[l + 1][k - 1] && f[k + 1][r]); } } } if (f[1][n]) puts("YES"); else puts("NO"); } return 0; }