実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 65
問題概要
座標平面上の点 から点 に移動するには のコストがかかる。このとき、原点からスタートし 個の点 へこの順に移動したのち原点に戻る場合の、コストの総和を求めよ。
制約
- 入力は全て整数。
考察
訪れるべき 個の点を配列に読み込み、その先頭と末尾に を追加する。その後、指示通りにシミュレーションしていけばよい。
なお、小数の答えを出力するときは、fixed << setprecision(x)
をcout
に続けて記述することで、小数点以下 桁までを出力することができる。私はこれを
#define fix(x) fixed << setprecision(x)
のようにマクロ化している。
コード
#include <bits/stdc++.h> using namespace std; using lld = long double; #define fix(x) fixed << setprecision(x) #define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++) // ======================================== // lld dist(lld x1, lld y1, lld x2, lld y2) { return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); } int main() { int N; cin >> N; vector<lld> X(N + 2), Y(N + 2); X.push_back(0); Y.push_back(0); rep(i, 1, N + 1) cin >> X[i] >> Y[i]; X.push_back(0); Y.push_back(0); lld ans = 0; rep(i, 0, N + 1) { ans += dist(X[i], Y[i], X[i + 1], Y[i + 1]); } cout << fix(10) << ans << endl; }
実装時間: 5分