タクシーを使っていこう
TopCoder Statistics - Problem Statement
正答率85%です。そんなに難しいものではありません。
問題:無限に広がる座標の町の中心に男は立っていた。突然上司から電話がかかり、今すぐ会社へ来るように言われる。ポイント(gX,gY)地点にその会社はある。歩いても行くことができるが、なるべく速く向いたい。この町にはタクシーの停留所が点在しており、そのポイントはtXs,tYsの配列に格納されている。
一区画歩く時間、タクシーで移動する時間がそれぞれ与えられている。最短時間を求めよ。
コード。
#include <iostream> #include <sstream> #include <string> #include <vector> #include <algorithm> using namespace std; class GrabbingTaxi{ public: int minTime(vector <int> tXs,vector <int> tYs, int gX,int gY,int wT,int tT){ int minT,Time; minT=wT*(abs(gX)+abs(gY)); cout << "mT=" << minT<<endl; for(int i=0;i<tXs.size();i++){ Time=wT*(abs(tXs[i])+abs(tYs[i]))+tT*(abs(gX-tXs[i])+abs(gY-tYs[i])); cout << "Time="<< Time <<endl; minT=min(minT,Time); } cout << "minimumTime="<< minT <<endl; return minT; } }; int main(){ GrabbingTaxi ob1; int a[]={82, -60, 57, 98, 30, -67, 84, -42, -100, 62}; int b[]={-7, 90, 53, -56, -15, -87, 22, -3, -61, -30}; vector <int> tx(a,a+10); vector <int> ty(b,b+10); int gx=21,gy=15,wt=53,tt=2; ob1.minTime(tx,ty,gx,gy,wt,tt); return 0; }
- はじめに徒歩のみで向った場合の時間を計算。
- つぎにタクシーを使った場合の時間を計算。停留所ごとに繰り返し。
おわり。