| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 39898 | LYLAKIOI | 【BJ】T1 | C++ | 解答错误 | 55 | 190 MS | 268 KB | 3666 | 2026-02-06 18:49:45 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } typedef long double db; const db G=9.80665; const db eps=1e-10; const db Eps=1; int n,m,v,xs,ys,h[25][25];db w; bool jump(int xs,int ys,int xt,int yt){ db ans1=0,ans2=0; db L=sqrtl((xs-xt)*(xs-xt)+(ys-yt)*(ys-yt))*w*2; auto f=[&](db vx){ if(vx<eps)return (db)-1e9+vx; db vy=sqrtl(v*v-vx*vx); return vy/vx*L-1.0/2*G*L*L/vx/vx; }; db l=0,r=v; while(r-l>eps){ db len=(r-l)/3; db mid1=l+len,mid2=r-len; if(f(mid1)<f(mid2))l=mid1; else r=mid2; } db D=h[xt][yt]-h[xs][ys]; if(f(l)<D-Eps)return 0; auto wk=[&](db l,db r,int o){ while(r-l>eps){ db mid=(l+r)/2; if((f(mid)>=D)==o)l=mid; else r=mid; } return l; }; db ps=wk(0,l,0),ps2=wk(l,v,1); auto check=[&](db ans){ db vx=ans,vy=sqrtl(v*v-vx*vx); auto f=[&](db L){ return vy/vx*L-1.0/2*G*L*L/vx/vx; }; up(i,min(xs,xt),max(xs,xt)){ up(j,min(ys,yt),max(ys,yt)){ bool e=0; db tl=-1,tr=-1; if(xs==xt){ e=1; tl=abs(j-ys)*2-1,tr=abs(j-ys)*2+1; if(j==ys)tl=0; if(j==yt)tr=abs(j-ys)*2; tl*=w,tr*=w; }else if(ys==yt){ e=1; tl=abs(i-xs)*2-1,tr=abs(i-xs)*2+1; if(i==xs)tl=0; if(i==xt)tr=abs(i-xs)*2; tl*=w,tr*=w; } else{ int xL=abs(i-xs)*2-1,xR=abs(i-xs)*2+1,yL=abs(j-ys)*2-1,yR=abs(j-ys)*2+1; if(i==xs)xL++;if(i==xt)xR--; if(j==ys)yL++;if(j==yt)yR--; tl=yL*abs(xt-xs),tr=yR*abs(xt-xs); tl/=abs(yt-ys),tr/=abs(yt-ys); tl=max(tl,(db)xL),tr=min(tr,(db)xR); if(tl>tr)e=0; else{ e=1; tl=sqrtl(tl*tl+(tl*(yt-ys)/(xt-xs))*(tl*(yt-ys)/(xt-xs)))*w; tr=sqrtl(tr*tr+(tr*(yt-ys)/(xt-xs))*(tr*(yt-ys)/(xt-xs)))*w; } } if(!e)continue; db D=h[i][j]-h[xs][ys]; for(db i:{tl,tr}) if(f(i)<D-Eps)return 0; } }return 1; }; return check(ps)||check(ps2); } int dis[25][25]; void slv(){ m=read(),n=read(),w=read()/2.0,v=read(),ys=read(),xs=read(); up(i,1,n)up(j,1,m)h[i][j]=read(),dis[i][j]=-1; queue<pi>q;dis[xs][ys]=0;q.push({xs,ys}); while(!q.empty()){ auto [x,y]=q.front();q.pop(); up(i,1,n)up(j,1,m)if(dis[i][j]==-1&&jump(x,y,i,j)){ dis[i][j]=dis[x][y]+1,q.push({i,j}); } } up(i,1,n){ up(j,1,m) if(~dis[i][j])printf("%d ",dis[i][j]); else printf("X "); puts(""); } } int main(){ // freopen("crime.in","r",stdin),freopen("crime.out","w",stdout); slv(); return 0; }