はじめに
たなしょです。
やっぱりジムはいいですね。
問題文
https://atcoder.jp/contests/abc140/tasks/abc140_c
考え方
配列bに要素を入れてあげます。
int n; cin >> n; vector<int> b(n-1); for (int i = 0; i < n - 1; i++) { cin >> b[i]; }
配列aはn-1個の要素をもっています。 a[0]=b[0]で配列bの0番目の要素を配列aの0番目の要素に代入します。
n-2個目の要素まではmin関数を使ってbのi番目要素とi-1番目の要素を比較して小さい方を配列aのi番目に要素に代入する。
最後に配列aのn-1番目の要素に配列bのn-2番目の要素を代入することで配列aに値が全て入りました。
vector<int> a(n); a[0] = b[0]; for (int i = 1; i <= n-2; i++) { a[i] = min(b[i], b[i-1]); } a[n-1] = b[n-2];
変数ansに配列aの各要素を足していけば最大値が求められます。
int ans = 0; for (int i = 0; i < n; i++) { ans += a[i]; } cout << ans << endl;
いざ実装
#include <iostream> #include <vector> #include <utility> #include <algorithm> #include <cmath> typedef long long ll; using namespace std; int main() { int n; cin >> n; vector<int> b(n-1); for (int i = 0; i < n - 1; i++) { cin >> b[i]; } vector<int> a(n); a[0] = b[0]; for (int i = 1; i <= n-2; i++) { a[i] = min(b[i], b[i-1]); } a[n-1] = b[n-2]; int ans = 0; for (int i = 0; i < n; i++) { ans += a[i]; } cout << ans << endl; return 0; }
最後に
筋トレと同じでAtCoderも日々の積み重ねですね。
最後まで読んでいただいてありがとうございました。 もしよろしければtwitterアカウント(@piklus100yen)もフォローしていただけると幸いです!