QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#579364 | #5476. Remodeling the Dungeon | mrkiencf# | WA | 100ms | 58952kb | C++20 | 3.6kb | 2024-09-21 12:53:57 | 2024-09-21 12:53:57 |
Judging History
answer
// #pragma GCC optimize("O3")
// #pragma GCC optimize("unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#include<bits/stdc++.h>
using namespace std;
#define i64 long long
#define mp make_pair
#define pb push_back
#define all(x) (x).begin(), (x).end()
const int MAXN = 1005;
int N, M, f[MAXN * MAXN], h[MAXN * MAXN], counter = 0, tin[MAXN * MAXN], tout[MAXN * MAXN];
int up[MAXN * MAXN][24];
char g[MAXN][MAXN];
vector<int> G[MAXN * MAXN];
void dfs(int u, int par = -1) {
tin[u] = tout[u] = ++counter;
f[u] = h[u];
for (auto v : G[u]) {
if (v != par) {
h[v] = h[u] + 1;
up[v][0] = u;
for (int j = 1; j <= 20; j ++) {
up[v][j] = up[up[v][j - 1]][j - 1];
}
dfs(v, u);
f[u] = max(f[u], f[v]);
}
}
tout[u] = counter;
}
int LCA(int u, int v) {
if (h[u] < h[v]) swap(u, v);
int gap = h[u] - h[v];
for (int j = 0; (1 << j) <= gap; j ++) {
if (gap >> j & 1) {
u = up[u][j];
}
}
if (u == v) return u;
for (int j = 20; j >= 0; j --) {
if (up[u][j] != up[v][j]) {
u = up[u][j];
v = up[v][j];
}
}
return up[u][0];
}
bool is_ancestor(int u, int v) {
return tin[u] <= tin[v] && tout[v] <= tout[u];
}
void Solve(void) {
cin >> N >> M;
for (int i = 1; i <= 2 * N + 1; i ++) {
for (int j = 1; j <= 2 * M + 1; j ++) {
cin >> g[i][j];
}
}
for (int i = 1; i <= N; i ++) {
for (int j = 1; j <= M; j ++) {
if (g[2 * i + 1][2 * j] == '.') {
int u = (i - 1) * M + j;
int v = i * M + j;
G[u].pb(v);
G[v].pb(u);
}
if (g[2 * i][2 * j + 1] == '.') {
int u = (i - 1) * M + j;
int v = (i - 1) * M + j + 1;
// cout << u << " " << v << "\n";
G[u].pb(v);
G[v].pb(u);
}
}
}
int root = (N - 1) * M + M;
h[root] = 1;
dfs(root);
int ans = INT_MIN;
// ancestors of 1
for (int i = 1; i <= N; i ++) {
for (int j = 1; j <= M; j ++) {
if (g[2 * i + 1][2 * j] != '.' && i * M + j <= N * M) {
int u = (i - 1) * M + j;
int v = i * M + j;
int lca1 = LCA(1, u);
if (lca1 != root && !is_ancestor(lca1, v)) {
int d = h[u] + h[1] - 2 * h[lca1] + 1;
ans = max(ans, d + h[v]);
// cout << u << " " << v << " " << d << " " << h[v] << "\n";
// cout << h[1] << " " << h[u] << " " << h[lca1] << "\n";
}
int lca2 = LCA(1, v);
if (lca2 != root && !is_ancestor(lca2, u)) {
int d = h[v] + h[1] - 2 * h[lca2] + 1;
ans = max(ans, d + h[u]);
// cout << u << " " << v << " " << d << " " << h[u] << "\n";
}
}
if (g[2 * i][2 * j + 1] != '.' && (i - 1) * M + j + 1 <= N * M) {
int u = (i - 1) * M + j;
int v = (i - 1) * M + j + 1;
int lca1 = LCA(1, u);
if (lca1 != root && !is_ancestor(lca1, v)) {
int d = h[u] + h[1] - 2 * h[lca1] + 1;
// cout << u << " " << v << " " << d + h[v] << "\n";
ans = max(ans, d + h[v]);
}
int lca2 = LCA(1, v);
if (lca2 != root && !is_ancestor(lca2, u)) {
int d = h[v] + h[1] - 2 * h[lca2] + 1;
// cout << u << " " << v << " " << d + h[u] << "\n";
ans = max(ans, d + h[u]);
}
}
}
}
cout << ans << "\n";
}
signed main() {
ios_base::sync_with_stdio(false); cin.tie(0);
cout << fixed << setprecision(10);
int Tests = 1; // cin >> Tests;
while (Tests --) {
Solve();
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2ms
memory: 15920kb
input:
2 3 +-+-+-+ |.....| +.+.+.+ |.|.|.| +-+-+-+
output:
6
result:
ok single line: '6'
Test #2:
score: 0
Accepted
time: 2ms
memory: 13812kb
input:
2 3 +-+-+-+ |...|.| +.+.+.+ |.|...| +-+-+-+
output:
4
result:
ok single line: '4'
Test #3:
score: 0
Accepted
time: 3ms
memory: 13824kb
input:
5 5 +-+-+-+-+-+ |...|...|.| +-+.+.+.+.+ |...|.|.|.| +.+.+.+-+.+ |.|...|.|.| +.+.+-+.+.+ |.|.....|.| +-+.+.+-+.+ |...|.....| +-+-+-+-+-+
output:
15
result:
ok single line: '15'
Test #4:
score: 0
Accepted
time: 87ms
memory: 58952kb
input:
500 500 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
output:
4693
result:
ok single line: '4693'
Test #5:
score: 0
Accepted
time: 92ms
memory: 56444kb
input:
500 500 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
output:
4191
result:
ok single line: '4191'
Test #6:
score: 0
Accepted
time: 100ms
memory: 54300kb
input:
499 500 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
output:
3846
result:
ok single line: '3846'
Test #7:
score: 0
Accepted
time: 80ms
memory: 56480kb
input:
500 499 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
output:
4856
result:
ok single line: '4856'
Test #8:
score: 0
Accepted
time: 90ms
memory: 52360kb
input:
499 499 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
output:
5829
result:
ok single line: '5829'
Test #9:
score: 0
Accepted
time: 5ms
memory: 17032kb
input:
100 200 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
output:
1147
result:
ok single line: '1147'
Test #10:
score: 0
Accepted
time: 7ms
memory: 17096kb
input:
97 202 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+...
output:
1388
result:
ok single line: '1388'
Test #11:
score: -100
Wrong Answer
time: 5ms
memory: 18760kb
input:
198 101 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |.............|.......|.|...|...|.....|.|.|.|.|.....|.|...|.......|...|.|.|...|.|.....|....
output:
1058
result:
wrong answer 1st lines differ - expected: '1046', found: '1058'