SRM 695 div2 easy BearNSWE
問題概要
(0, 0)から方角と距離を指定された通り、ある点まで動く。ある点までの移動距離と、ある点から(0, 0)までの距離の合計を求める。
解法
スタート地点を(0, 0)として、ゴールの座標を計算する。(0, 0)とゴールの座標がわかったので、その間の距離は計算すれば求まる。ゴールまでの距離は与えられた距離を足していけばいい。
ミス
なし。
コード
#include <iostream> #include <algorithm> #include <vector> #include <queue> #include <cstdio> #include <cmath> using namespace std; typedef long long ll; #define rep(i,n) for(int i=0;i<(n);i++) const int INF = 1e9; class BearNSWE{ public: double totalDistance(vector <int> a, string dir){ int y = 0, x = 0; rep(i, dir.size()){ if(dir[i] == 'N'){ y += a[i]; }else if(dir[i] == 'E'){ x += a[i]; }else if(dir[i] == 'S'){ y -= a[i]; }else if(dir[i] == 'W'){ x -= a[i]; } } double ret = sqrt(y * y + x * x); rep(i, a.size()){ ret += a[i]; } return ret; } };