| 比赛 |
2026.8.26 |
评测结果 |
AAAAATTTTTTTTTTTTTTT |
| 题目名称 |
merge |
最终得分 |
25 |
| 用户昵称 |
LikableP |
运行时间 |
31.524 s |
| 代码语言 |
C++ |
内存使用 |
3.72 MiB |
| 提交时间 |
2026-08-26 12:39:10 |
显示代码纯文本
#include <cstdio>
#include <vector>
#include <tuple>
int T;
std::vector<std::tuple<int, int, int>> steps;
bool dfs(std::vector<int> vector) {
int len = vector.size() - 1;
if (len == 1) return true;
for (int i = 1; i <= len; ++i) {
for (int j = i + 1; j <= len; ++j) {
for (int k = j + 1; k <= len; ++k) {
if ((vector[i] ^ vector[j] ^ vector[k]) == 0) {
int s = 0;
for (int l = i; l <= k; ++l) s ^= vector[l];
std::vector<int> restore = vector;
steps.emplace_back(i, j, k);
vector.erase(vector.begin() + i, vector.begin() + k + 1);
vector.insert(vector.begin() + i, s);
if (dfs(vector)) return true;
vector = restore;
steps.pop_back();
}
}
}
}
return false;
}
int main() {
freopen("mergeegrem.in", "r", stdin);
freopen("mergeegrem.out", "w", stdout);
scanf("%d", &T);
while (T--) {
steps.clear();
int n;
scanf("%d", &n);
std::vector<int> a(n + 1);
for (int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
}
if (n == 1) {
printf("Huoyu\n0\n");
} else if (n == 2) {
printf("Shuiniao\n");
} else if (n == 3) {
printf((a[1] ^ a[2] ^ a[3]) == 0 ? "Huoyu\n1\n1 2 3\n" : "Shuiniao\n");
} else {
bool ok = dfs(a);
if (ok) {
printf("Huoyu\n");
printf("%llu\n", steps.size());
for (auto tuple : steps) {
printf("%d %d %d\n", std::get<0>(tuple), std::get<1>(tuple), std::get<2>(tuple));
}
} else {
printf("Shuiniao\n");
}
}
}
return 0;
}