题意:一个类似于硬磁盘的停车场,要从哪取车就让磁头转到哪然后让盘面旋转使得要取的车到磁头处,然后读取到信息回到出口处。。。然后给你取车顺序,问总花费时间。

题解:模拟吧。

View Code
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int pos[55];
 6 struct data
 7 {
 8     int h,p;
 9 }po[55*55];
10 int main()
11 {
12     int T;
13     for(scanf("%d",&T);T;T--)
14     {
15         int h,w,n=0,tp,ans;
16         scanf("%d%d",&h,&w);
17         for(int i=0;i<h;i++)
18         {
19             pos[i]=0;
20             for(int j=0;j<w;j++)
21             {
22                 scanf("%d",&tp);
23                 if(tp!=-1)
24                 {
25                     n=max(tp,n);
26                     po[tp].h=i;
27                     po[tp].p=j;
28                 }
29             }
30         }
31         ans=0;
32         for(int i=1;i<=n;i++)
33         {
34             int hh=po[i].h,pp=po[i].p;
35             tp=abs(pos[hh]-pp);
36             tp=min(tp,w-tp);
37             ans+=hh*20+tp*5;
38             pos[hh]=pp;
39         }
40         printf("%d\n",ans);
41     }
42     return 0;
43 }