[AtCoder]ABC B067 – Snake Toy[C++]

プログラミング

ABC B067 – Snake Toy

問題

すぬけくんはN本の棒を持っています。 i番目の棒の長さはliです。
すぬけくんはK本の棒を選んでつなげて、ヘビのおもちゃを作りたいです。
ヘビのおもちゃの長さは選んだ棒たちの長さの総和で表されます。 ヘビのおもちゃの長さとしてありうる長さのうち、最大値を求めなさい。

自分の回答

#include <bits/stdc++.h>
using namespace std;
int main () {
  int N, K;
  cin >> N >> K;
  
  int snake[N];
  for(int i = 0; i < N; i++){
    int a;
    cin >> a;
    snake[i] = a;
  }
  sort(snake, snake + N);
  reverse(snake, snake + N);
  
  int ans;
  for(int i = 0; i < K; i++){
    ans += snake[i];
  }
  cout << ans << endl;
}

特に難しい事はありません。まずは、蛇の長さを配列snakeに格納します。
次に、sort関数で昇順に並べた後に、reverse関数で降順にし、先頭から値が多い順に並ぶようにします。これはしなくてもいいですが、自分はこちらの方がわかりやすいので、降順にしました。
そして、K回、forを回して、足し合わせたものを出力します。

今回、初めて、配列に対して、sort関数やreverse関数を使った気がします。C++だと、文字列や配列、ベクターに対して、sortをかける時に記述の仕方が違うので、めんどくさいですね。

タイトルとURLをコピーしました