社区讨论

玄关,求助!!!

P1519[USACO2.4] 穿越栅栏 Overfencing参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjrqnq7
此快照首次捕获于
2025/11/04 07:26
4 个月前
此快照最后确认于
2025/11/04 07:26
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,e1x=999,e2x,e1y=999,e2y,cnt,maxn,ans[1001][1001];
char a[1001][1001],b[1001][1001];
ll dx[4]={0,0,-2,2};
ll dy[4]={-2,2,0,0};
ll ddx[4]={0,0,-1,1};
ll ddy[4]={-1,1,0,0};
int main(){
	cin>>m>>n;
	for(ll i=1;i<=2*n+1;i++){
		for(ll j=1;j<=2*m+1;j++){
			scanf("%c",&a[i][j]);
			b[i][j]=a[i][j];
			if(j==2*m+1||i==2*n+1||j==1||i==1){
				if(a[i][j]==' '){
					if(e1x==999||e1y==999){
						if(i==2*n+1){
							e1x=2*n,e1y=j;
						}
						else if(i==1){
							e1x=2,e1y=j;
						}
						else if(j==2*m+1){
							e1x=i,e1y=2*m;
						}
						else{
							e1x=i,e1y=2;
						}
					}
					else{
						if(i==2*n+1){
							e2x=2*n,e2y=j;
						}
						else if(i==1){
							e2x=2,e2y=j;
						}
						else if(j==2*m+1){
							e2x=i,e2y=2*m;
						}
						else{
							e2x=i,e2y=2;
						}
					}
				}
			}
		}
	}
	for(ll i=2;i<=2*n;i+=2){
		for(ll j=2;j<=2*m;j+=2){
			if(a[i][j]==' '){
                queue<ll>qx,qy;
                qx.push(i);
                qy.push(j);
                while(!qx.empty()&&!qy.empty()){
                    ll x=qx.front(),y=qy.front();
                    qx.pop();
                    qy.pop();
                    for(ll i=0;i<4;i++){
                        ll nx=x+dx[i],ny=y+dy[i];
                        ll xx=x+ddx[i],yy=y+ddy[i];
                        if(nx>=2&&nx<=2*n&&ny>=2&&ny<=2*m&&b[nx][ny]==' '&&b[xx][yy]==' '&&xx>=1&&xx<=2*n+1&&yy>=1&&yy<=2*m+1){
                            qx.push(nx);
                            qy.push(ny);
                            ans[nx][ny]=ans[x][y]+1;
                        }
                    }
                }
                maxn=max(maxn,max(ans[e1x][e1y],ans[e2x][e2y]));
                memset(ans,0,sizeof(ans));
			}
		}
	}
    cout<<maxn;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...