提交时间:2026-02-06 18:14:31
运行 ID: 39891
#include<bits/stdc++.h> #define db long double #define int long long using namespace std; inline void read(int &x){ x=0;char c=getchar();bool neg=0; for(;!isdigit(c);c=getchar())neg=(c=='-'); for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48); if(neg)x=-x; } #define read2(a,b) read(a),read(b) #define read3(a,b,c) read2(a,b),read(c) #define read4(a,b,c,d) read3(a,b,c),read(d) #define read5(a,b,c,d,e) read4(a,b,c,d),read(e) #define read6(a,b,c,d,e,f) read5(a,b,c,d,e),read(f) int n,m,w,v,x,y,h[105][105]; constexpr db g=9.80665L,eps=1e-6L; int id(int a,int b){ return (a-1)*m+b; } int dis(int a,int b,int c,int d){ return w*w*((a-c)*(a-c)+(b-d)*(b-d)); } vector<int>e[405]; int d[405],vis[405]; void dij(){ for(int i=1;i<=n*m;i++)d[i]=100000000,vis[i]=0; d[id(x,y)]=0; priority_queue<pair<int,int>>q; q.push({0,id(x,y)}); while(!q.empty()){ int p=q.top().second; q.pop(); if(vis[p])continue; vis[p]=1; for(int x:e[p]){ if(d[x]>d[p]+1){ d[x]=d[p]+1; q.push({-d[x],x}); } } } } void slv(){ read6(n,m,w,v,x,y); swap(n,m); swap(x,y); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)read(h[i][j]); db len=v*v/g; if(len+eps<w){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cout<<"X0"[i==x&&j==y]<<" \n"[j==m]; } } return; } len*=len; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ for(int x=1;x<=n;x++){ for(int y=1;y<=m;y++){ if(dis(i,j,x,y)<=len+eps)e[id(i,j)].push_back(id(x,y)); } } } } dij(); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cout<<d[id(i,j)]<<" \n"[j==m]; } } } signed main(){ slv(); }