20pts奇异MLE求调
查看原帖
20pts奇异MLE求调
1364494
lrqcs楼主2024/7/30 14:47

RT
点2 本地,你谷IDE,https://duck.ac都能过,一个788kb,一个1132kb,本地不知道多大,但mxxz只记了3w多.

#include<stdio.h>
#include<string.h>
#include<queue>
int n,m,stx,sty,edx,edy,x,y,t,ans;
char mp[222][222],vis[222][222];
int p[222][222];int mxxz=0;
std::queue<int>nx,ny,nt;
void bfs(int X,int Y,int XX,int YY,int T){
	nx.push(X),ny.push(Y),nt.push(T);
	nx.push(XX),ny.push(YY),nt.push(T);
	while(!nx.empty()){
		x=nx.front(),y=ny.front(),t=nt.front();
		mxxz=(mxxz>nx.size()?mxxz:nx.size());
		//printf("x=%d,y=%d,t=%d\n",x,y,t);
		nx.pop(),ny.pop(),nt.pop();
		vis[x][y]=1;p[x][y]>t?p[x][y]=t:0;
		if(x+2<n&&!vis[x+2][y]&&mp[x+1][y]==32)
			nx.push(x+2),ny.push(y),nt.push(t+1);
		if(y+2<m&&!vis[x][y+2]&&mp[x][y+1]==32)
			nx.push(x),ny.push(y+2),nt.push(t+1);
		if(x>2&&!vis[x-2][y]&&mp[x-1][y]==32)
			nx.push(x-2),ny.push(y),nt.push(t+1);
		if(y>2&&!vis[x][y-2]&&mp[x][y-1]==32)
			nx.push(x),ny.push(y-2),nt.push(t+1);
	}
}
int main(){
	//freopen("P1519_2.in","r",stdin);
	scanf("%d%d",&n,&m);
	n=n<<1|1,m=m<<1|1;n^=m^=n^=m;
	//getchar();
	//printf("n=%d,m=%d\n",n,m);
	for(int i=1;i<=n;++i){
		getchar();
		for(int j=1;j<=m;++j)
			mp[i][j]=getchar();
	}
	//for(int i=1;i<=n;++i)printf("%s\n",mp[i]+1);
	for(int i=2;i<m;i+=2)
		if(mp[1][i]==32&&!stx)stx=2,sty=i;
		else if(mp[1][i]==32)edx=2,edy=i;
	for(int i=2;i<m;i+=2)
		if(mp[n][i]==32&&!stx)stx=n-1,sty=i;
		else if(mp[n][i]==32)edx=n-1,edy=i;
	for(int i=2;i<n;i+=2)
		if(mp[i][1]==32&&!stx)stx=i,sty=2;
		else if(mp[i][1]==32)edx=i,edy=2;
	for(int i=2;i<n;i+=2)
		if(mp[i][m]==32&&!stx)stx=i,sty=m-1;
		else if(mp[i][m]==32)edx=i,edy=m-1;
	//printf("%d %d %d %d\n",stx,sty,edx,edy);
	memset(p,0x72,sizeof p);
	bfs(stx,sty,edx,edy,1);
	//memset(vis,0,sizeof vis);
	//bfs(1);
	for(int i=2;i<n;i+=2)
		for(int j=2;j<m;j+=2)
			ans<p[i][j]&&p[i][j]!=0x72727272?ans=p[i][j]:0;
//	for(int i=1;i<=n;++i,puts(""))
//		for(int j=1;j<=m;++j){
//			if((i|j)&1)putchar(mp[i][j]);
//			else printf("%d",p[i][j]>9?0:p[i][j]);
//		}
	printf("%d",ans);
	return 0;
}

单getchar 和 双getchar 都试过,一个10一个20...
本地拍了20多组数据都过了,所以到底是什么问题啊qwq...

2024/7/30 14:47
加载中...