QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#761102 | #3040. Container | qL | WA | 2ms | 8668kb | C++14 | 2.1kb | 2024-11-18 20:55:48 | 2024-11-18 20:55:49 |
Judging History
answer
/*
* @Author: qL
* @Date: 2024-11-18 20:01:15
* @LastEditTime: 2024-11-18 20:51:49
* @Problem: 机器 machine
* @Link: https://www.fzoi.top/contest/524/problem/9615
* @Solution: Official
*/
#include <cstdio>
#include <vector>
#include <algorithm>
#define _(func) __builtin_##func
using i32 = int;
constexpr i32 N = 1000;
i32 n, c;
char s[N + 3], t[N + 3];
i32 end[N + 1], le;
i32 a[N + 1], b[N + 1], la, lb;
i32 f[N + 1][N + 1], p[N + 1][N + 1];
i32 calc(i32 d) noexcept { return d / 2 * (c + 4) + (d & 1) * (c + 3); }
std::vector<std::pair<i32, i32>> ans, sub[2];
void make(i32 x, i32 y) noexcept {
if (!x && !y) return;
if (p[x][y] <= 1)
sub[end[x + y] <= a[x]].emplace_back(a[x], end[x + y]), make(x - 1, y);
else
sub[end[x + y] <= b[y]].emplace_back(b[y], end[x + y]), make(x, y - 1);
}
signed main() noexcept {
scanf("%d%d%s%s", &n, &c, s + 1, t + 1);
for (i32 i = 1; i <= n; ++i)
if (s[i] == 'B') end[++le] = i;
for (i32 i = 1; i <= n; ++i)
if (t[i] == 'B') (i & 1 ? a : b)[++(i & 1 ? la : lb)] = i;
_(memset)(f, 0x3f, sizeof(f)), f[0][0] = 0;
for (i32 i = 0; i <= la; ++i)
for (i32 j = 0; j <= lb; ++j) {
if (i != la) {
i32 v = f[i][j] + calc(std::abs(end[i + j + 1] - a[i + 1]));
for (i32 k = 1; k <= j; ++k) v += b[k] > a[i + 1];
if (f[i + 1][j] > v) f[i + 1][j] = v, p[i + 1][j] = 1;
}
if (j != lb) {
i32 v = f[i][j] + calc(std::abs(end[i + j + 1] - b[j + 1]));
for (i32 k = 1; k <= i; ++k) v += a[k] > b[j + 1];
if (f[i][j + 1] > v) f[i][j + 1] = v, p[i][j + 1] = 2;
}
}
make(la, lb);
std::sort(sub[0].begin(), sub[0].end());
std::sort(sub[1].begin(), sub[1].end());
std::reverse(sub[1].begin(), sub[1].end());
for (auto [r, l] : sub[1]) {
while (r - l >= 2) ans.emplace_back(l, l + 2), ++ ++l;
if (l != r) ans.emplace_back(l, r);
}
for (auto [l, r] : sub[0]) {
while (r - l >= 2) ans.emplace_back(r - 2, r), -- --r;
if (l != r) ans.emplace_back(l, r);
}
printf("%zu\n", ans.size());
for (auto [l, r] : ans) printf("%d %d\n", l, r);
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 2ms
memory: 8668kb
input:
5 2 11221 21112
output:
0
result:
wrong answer invalid plan.