社区讨论

为何我在线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 条回复,欢迎继续交流。

正在加载回复...