srupのメモ帳

競プロで解いた問題や勉強したことを記録していくメモ帳

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;
    }
};