社区讨论
玄关,求助!!!
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 条回复,欢迎继续交流。
正在加载回复...