QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#211458 | #5476. Remodeling the Dungeon | bulijiojiodibuliduo# | WA | 62ms | 23496kb | C++17 | 2.1kb | 2023-10-12 16:40:00 | 2023-10-12 16:40:00 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef basic_string<int> BI;
typedef long long ll;
typedef pair<int,int> PII;
typedef double db;
mt19937 mrand(random_device{}());
const ll mod=1000000007;
int rnd(int x) { return mrand() % x;}
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
// head
const int N=251000,M=510;
VI e[N],pt;
int h,w;
char s[N];
int d1[N],d2[N],vis[N],lab[N];
int p[N],l;
bool hor[M][M],ver[M][M];
void add(int u,int v) {
e[u].pb(v);
e[v].pb(u);
//printf("%d %d\n",u,v);
}
void dfs(int u,int f) {
if (u==h*w-1) {
int x=u;
while (x) {
pt.pb(x);
x=p[x];
}
pt.pb(x);
}
for (auto v:e[u]) if (v!=f) {
p[v]=u;
d1[v]=d1[u]+1;
dfs(v,u);
}
}
void dfs2(int u,int f) {
for (auto v:e[u]) if (v!=f) {
d2[v]=d2[u]+1;
dfs2(v,u);
}
}
void dfs3(int u,int f) {
lab[u]=l;
for (auto v:e[u]) if (v!=f&&!vis[v]) {
dfs3(v,u);
}
}
int main() {
scanf("%d%d",&h,&w);
scanf("%*s");
rep(i,0,h) {
scanf("%s",s);
for (int j=2;j<=2*(w-1);j+=2) if (s[j]=='.') {
add(i*w+j/2-1,i*w+j/2);
hor[i][j/2-1]=1;
}
scanf("%s",s);
for (int j=1;j<=2*w-1;j+=2) if (s[j]=='.') {
add(i*w+j/2,i*w+j/2+w);
ver[i][j/2]=1;
}
}
dfs(0,-1);
dfs2(h*w-1,-1);
for (auto x:pt) vis[x]=1;
reverse(all(pt));
for (auto x:pt) {
++l;
dfs3(x,-1);
}
int ans=SZ(pt);
rep(i,0,h) rep(j,0,w) {
if (j+1<w&&!hor[i][j]) {
if (lab[i*w+j]!=lab[i*w+j+1]) {
int u=i*w+j,v=i*w+j+1;
if (lab[u]>lab[v]) swap(lab[u],lab[v]);
ans=max(ans,d1[u]+d2[v]+2);
}
}
if (i+1<h&&!ver[i][j]) {
if (lab[i*w+j]!=lab[i*w+j+w]) {
int u=i*w+j,v=i*w+j+w;
if (lab[u]>lab[v]) swap(lab[u],lab[v]);
ans=max(ans,d1[u]+d2[v]+2);
}
}
}
printf("%d\n",ans);
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 13508kb
input:
2 3 +-+-+-+ |.....| +.+.+.+ |.|.|.| +-+-+-+
output:
6
result:
ok single line: '6'
Test #2:
score: 0
Accepted
time: 3ms
memory: 13548kb
input:
2 3 +-+-+-+ |...|.| +.+.+.+ |.|...| +-+-+-+
output:
4
result:
ok single line: '4'
Test #3:
score: 0
Accepted
time: 0ms
memory: 11552kb
input:
5 5 +-+-+-+-+-+ |...|...|.| +-+.+.+.+.+ |...|.|.|.| +.+.+.+-+.+ |.|...|.|.| +.+.+-+.+.+ |.|.....|.| +-+.+.+-+.+ |...|.....| +-+-+-+-+-+
output:
15
result:
ok single line: '15'
Test #4:
score: -100
Wrong Answer
time: 62ms
memory: 23496kb
input:
500 500 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
output:
7373
result:
wrong answer 1st lines differ - expected: '4693', found: '7373'