题目链接:http://poj.org/problem?id=3505
解题报告:
#include <stdio.h> #include <iostream> #include <math.h> #include <algorithm> using namespace std; #define MAX 2600 struct Point{ int x; int y; }cars[MAX]; int mov[60]; ///每层停车场只有多少个停车位 int main() { int T; scanf("%d",&T); while(T--) { int h; ///层数 int l; ///每层多少个位置 scanf("%d%d",&h,&l); int sum=0; ///总共有多少辆汽车 for(int i=0;i<h;i++) { for(int j=0;j<l;j++) { int tmp; ///车的编号 scanf("%d",&tmp); if(tmp!=-1) { cars[tmp].x=i; cars[tmp].y=j; sum++; } } } memset(mov,0,sizeof(mov)); int ans=0; ///拿车 for(int i=1;i<=sum;i++) { ans+=cars[i].x*20; int dis; dis=min(abs(cars[i].y-mov[cars[i].x]),l-abs(cars[i].y-mov[cars[i].x])); ans+=dis*5; mov[cars[i].x]=cars[i].y; ///存下转盘当前位置 } printf("%d\n",ans); } return 0; }
时间: 2024-11-09 12:55:57