1 条题解
-
0
C++ :
#include <cstdio> #include <cstdlib> /* 值 v 的位置 -> pos[v]。走法固定(每次 +D),故沿链预处理 「从 v 一路走到本链末端的总代价」suf[v] = cost(v,v+D) + suf[v+D], 一次询问 L->R 的代价就是 suf[L]-suf[R]。 */ static int ar[90005], ac[90005]; static long long suf[90005]; int main(){ int H,W; long long D; if(scanf("%d %d %lld",&H,&W,&D)!=3) return 0; int N=H*W; for(int i=1;i<=H;i++) for(int j=1;j<=W;j++){ int v; if(scanf("%d",&v)!=1) return 0; ar[v]=i; ac[v]=j; } for(int v=N; v>=1; v--){ long long nv = v + D; if(nv>(long long)N) suf[v]=0; else { long long c = labs((long long)ar[v]-ar[nv]) + labs((long long)ac[v]-ac[nv]); suf[v] = c + suf[nv]; } } int Q; if(scanf("%d",&Q)!=1) return 0; while(Q--){ int L,Rr; scanf("%d %d",&L,&Rr); printf("%lld\n", suf[L]-suf[Rr]); } return 0; }
- 1
信息
- ID
- 2568
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者