たなしょのメモ

日々勉強していることをつらつらと

C - Maximal Value

はじめに

たなしょです。

やっぱりジムはいいですね。

問題文

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)もフォローしていただけると幸いです!