QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#211458#5476. Remodeling the Dungeonbulijiojiodibuliduo#WA 62ms23496kbC++172.1kb2023-10-12 16:40:002023-10-12 16:40:00

Judging History

你现在查看的是最新测评结果

  • [2023-10-12 16:40:00]
  • 评测
  • 测评结果:WA
  • 用时:62ms
  • 内存:23496kb
  • [2023-10-12 16:40:00]
  • 提交

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'