QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#47679 | #4376. Dragon slayer | ckiseki# | AC ✓ | 169ms | 3532kb | C++ | 2.7kb | 2022-09-10 15:56:43 | 2022-09-10 15:56:43 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
static constexpr int maxn = 16;
int vis[maxn][maxn], visc;
int a[2][maxn][maxn];
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int t; cin >> t;
while (t--) {
int n, m, k; cin >> n >> m >> k;
int xs, ys, xt, yt;
cin >> xs >> ys >> xt >> yt;
vector<pair<pair<int, int>, pair<int, int>>> b(k);
for (auto &[lhs, rhs] : b) {
cin >> lhs.first >> lhs.second;
cin >> rhs.first >> rhs.second;
}
auto gao = [&](const pair<pair<int, int>, pair<int, int>> &l){
const auto &[lhs, rhs] = l;
if (lhs.first == rhs.first) {
const auto &[p, q] = minmax(lhs.second, rhs.second);
for (int i = p; i < q; ++i)
a[0][lhs.first][i] = visc;
} else {
const auto &[p, q] = minmax(lhs.first, rhs.first);
for (int i = p; i < q; ++i)
a[1][i][lhs.second] = visc;
}
};
auto good = [&](int s) {
++visc;
for (int i = 0; i < k; ++i) {
if (!((s >> i) & 1))
gao(b[i]);
}
queue<pair<int, int>> bfs;
bfs.emplace(xs, ys);
vis[xs][ys] = visc;
while (not bfs.empty()) {
auto [x, y] = bfs.front();
bfs.pop();
if (int nx = x, ny = y + 1; ny < m) {
if (vis[nx][ny] != visc and a[1][nx][ny] != visc) {
vis[nx][ny] = visc;
bfs.emplace(nx, ny);
}
}
if (int nx = x, ny = y - 1; ny >= 0) {
if (vis[nx][ny] != visc and a[1][nx][ny + 1] != visc) {
vis[nx][ny] = visc;
bfs.emplace(nx, ny);
}
}
if (int nx = x + 1, ny = y; nx < n) {
if (vis[nx][ny] != visc and a[0][nx][ny] != visc) {
vis[nx][ny] = visc;
bfs.emplace(nx, ny);
}
}
if (int nx = x - 1, ny = y; nx >= 0) {
if (vis[nx][ny] != visc and a[0][nx + 1][ny] != visc) {
vis[nx][ny] = visc;
bfs.emplace(nx, ny);
}
}
}
return vis[xt][yt] == visc;
};
int ans = k;
const int S = 1 << k;
for (int s = 0; s < S; ++s) {
if (good(s)) ans = min(ans, __builtin_popcount(s));
}
cout << ans << '\n';
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 169ms
memory: 3532kb
input:
10 4 4 4 0 2 3 3 0 2 4 2 1 3 1 0 2 4 2 1 3 1 3 4 3 2 2 0 0 2 1 0 1 3 1 1 0 1 2 3 2 2 0 0 2 1 2 1 2 2 1 0 1 1 15 15 15 3 12 4 1 8 0 8 15 1 11 15 11 1 1 1 15 3 1 3 15 0 10 14 10 14 1 14 14 8 1 8 15 1 5 14 5 0 15 14 15 0 4 14 4 0 2 15 2 11 0 11 15 4 1 4 15 1 11 15 11 1 12 14 12 15 15 15 8 5 14 0 0 12 1...
output:
1 2 0 5 3 5 1 4 1 0
result:
ok 10 lines