| 比赛 |
期末考试4 |
评测结果 |
AAAAWWAAAATTTTTTTTTTTTTTT |
| 题目名称 |
区间消除 |
最终得分 |
32 |
| 用户昵称 |
LikableP |
运行时间 |
16.570 s |
| 代码语言 |
C++ |
内存使用 |
1.66 MiB |
| 提交时间 |
2026-02-12 11:15:55 |
显示代码纯文本
#include <cstdio>
#include <bitset>
#include <numeric>
typedef long long ll;
int n, q;
ll partial[110];
int main() {
#ifdef LOCAL
freopen("!input.in", "r", stdin);
freopen("!output.out", "w", stdout);
#else
freopen("dump.in", "r", stdin);
freopen("dump.out", "w", stdout);
#endif
scanf("%d", &q);
while (q--) {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%lld", &partial[i]);
}
std::bitset<110> bitset[110][110];
std::partial_sum(partial + 1, partial + n + 1, partial + 1, [](ll x, ll y) { return x ^ y; });
for (int i = 1; i <= n; ++i) bitset[i][i][i] = 1;
for (int len = 2; len <= n; ++len) {
for (int l = 1; l <= n - len + 1; ++l) {
int r = l + len - 1;
for (int i = l; i < r; ++i) {
ll xorleft = partial[i] ^ partial[l - 1], xorright = partial[r] ^ partial[i];
if (xorleft > xorright) {
bitset[l][r] |= bitset[l][i];
} else if (xorleft < xorright) {
bitset[l][r] |= bitset[i + 1][r];
} else {
bitset[l][r] |= bitset[l][i] | bitset[i + 1][r];
}
}
}
}
for (int i = 1; i <= n; ++i) {
putchar(bitset[1][n][i] ? '1' : '0');
}
putchar('\n');
}
return 0;
}