CF1130C求救
  • 板块学术版
  • 楼主WiccldCute
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/12/12 21:13
  • 上次更新2023/11/3 22:19:20
查看原帖
CF1130C求救
566513
WiccldCute楼主2021/12/12 21:13
#include <bits/stdc++.h>
using namespace std;
int n,ax,ay,bx,by;
const int dx[]={0,0,1,-1};
const int dy[]={1,-1,0,0};
int a[52][52];
struct pos{
    int x,y;
};
vector<pos> v1;
void cc2(){
    int vis[51][51];
    memset(vis,0,sizeof(vis));
    queue<pos>q;
    q.push({bx,by});
    while(!q.empty()){
        int ox=q.front().x,oy=q.front().y;
        q.pop();
        v1.push_back({ox,oy});
        vis[ox][oy]=1;
        
        for(int i=0;i<4;i++){
            int nx=ox+dx[i],ny=oy+dy[i];
            if(nx<0||nx>=n||ny<0||ny>=n||a[nx][ny]==1||vis[nx][ny])continue;
            q.push({nx,ny});
        }
    }
}
vector<pos> v;
void cc(){
    int vis[51][51];
    memset(vis,0,sizeof(vis));
    queue<pos>q;
    q.push({ax,ay});
    while(!q.empty()){
        int ox=q.front().x,oy=q.front().y;
        q.pop();
        v.push_back({ox,oy});
        vis[ox][oy]=1;
        for(int i=0;i<4;i++){
            int nx=ox+dx[i],ny=oy+dy[i];
            if(nx<0||nx>=n||ny<0||ny>=n||a[nx][ny]==1||vis[nx][ny])continue;
            q.push({nx,ny});
        }
    }
}

int main(){
    cin>>n>>ax>>ay>>bx>>by;
    ax--,ay--,bx--,by--;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        for(int j=0;j<n;j++){
            a[i][j]=s[j]-'0';
        }
    }
    cc();cc2();
    int ans=999999999;
    for(int k=0;k<v1.size();k++){
        for(int p=0;p<v.size();p++){
            ans=min(ans,(v1[k].x-v[p].x)*(v1[k].x-v[p].x)+(v1[k].y-v[p].y)*(v1[k].y-v[p].y));
        } 
    }
    cout<<ans<<endl;
}

为什么会MLEklkl理论上最大只会存约10000个int呀

https://codeforces.com/problemset/problem/1130/C

https://codeforces.com/contest/1130/submission/138858973

2021/12/12 21:13
加载中...