社区讨论
为何我在线IDE与本机运行结果不同(本机与USACO数据相同)?
P1519[USACO2.4] 穿越栅栏 Overfencing参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi6hqv97
- 此快照首次捕获于
- 2025/11/20 05:04 4 个月前
- 此快照最后确认于
- 2025/11/20 05:04 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
bool mp[108][40][4];
char mps[250][90];
int len[108][40];
int entre[2][2],num;
queue<pair<int,int> >lines;
int main() {
int b,a;cin>>b>>a;getchar();
for(int i=0;i<=2*a;i++){for(int j=0;j<=2*b;j++)mps[i][j]=getchar();getchar();}
for(int i=0;i<=a-1;i++){
for(int j=0;j<=b-1;j++){
if(mps[i*2][j*2+1]==' ')mp[i][j][0]=true;
if(mps[i*2+1][j*2+2]==' ')mp[i][j][1]=true;
if(mps[i*2+2][j*2+1]==' ')mp[i][j][2]=true;
if(mps[i*2+1][j*2]==' ')mp[i][j][3]=true;
if(i==0 and mp[i][j][0]){entre[num][0]=i;entre[num++][1]=j;mp[i][j][0]=false;}
if(i==a-1 and mp[i][j][2]){entre[num][0]=i;entre[num++][1]=j;mp[i][j][2]=false;}
if(j==0 and mp[i][j][3]){entre[num][0]=i;entre[num++][1]=j;mp[i][j][3]=false;}
if(j==b-1 and mp[i][j][1]){entre[num][0]=i;entre[num++][1]=j;mp[i][j][1]=false;}
}
}
lines.push(make_pair(entre[0][0],entre[0][1]));
lines.push(make_pair(entre[1][0],entre[1][1]));
len[entre[0][0]][entre[0][1]]=1;len[entre[1][0]][entre[1][1]]=1;
while(!lines.empty()){
int x=lines.front().first,y=lines.front().second;
if(mp[x][y][0] and (len[x][y]+1<len[x-1][y] or len[x-1][y]==0)){lines.push(make_pair(x-1,y));len[x-1][y]=len[x][y]+1;}
if(mp[x][y][1] and (len[x][y]+1<len[x][y+1] or len[x][y+1]==0)){lines.push(make_pair(x,y+1));len[x][y+1]=len[x][y]+1;}
if(mp[x][y][2] and (len[x][y]+1<len[x+1][y] or len[x+1][y]==0)){lines.push(make_pair(x+1,y));len[x+1][y]=len[x][y]+1;}
if(mp[x][y][3] and (len[x][y]+1<len[x][y-1] or len[x][y-1]==0)){lines.push(make_pair(x,y-1));len[x][y-1]=len[x][y]+1;}
lines.pop();
}
int max=0;
for(int i=0;i<=a-1;i++)for(int j=0;j<=b-1;j++)if(len[i][j]>max)max=len[i][j];
cout<<max;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...