けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 361 A - Insert (7Q, 灰色, 100 点)

for 文の練習問題。

問題概要

長さ  N の整数列  A_{1}, A_{2}, \dots, A_{N} が与えられる。

この数列の  K 番目の要素の直後に値  X を挿入して得られる数列を出力せよ。

解法 (1):関数 erase() を利用する

C++ では、vector 型変数 A に対して、 K 番目に値  X を挿入する処理は

A.insert(A.begin() + K, X);

と書ける。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N, K, X;
    cin >> N >> K >> X;
    vector<int> A(N);
    for (int i = 0; i < N; ++i) cin >> A[i];
    A.insert(A.begin() + K, X);
    
    for (int i = 0; i < N + 1; ++i) cout << A[i] << " ";
    cout << endl;
}

 

解法 (2):for 文でなんとかする

次のようにすることも考えられる。

  • 数列  A の先頭から  K 個を出力する
  •  X を出力する
  • 数列  A の残りの要素を出力する

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N, K, X;
    cin >> N >> K >> X;
    vector<int> A(N);
    for (int i = 0; i < N; ++i) cin >> A[i];
    
    for (int i = 0; i < K; ++i) cout << A[i] << " ";
    cout << X << " ";
    for (int i = K; i < N; ++i) cout << A[i] << " ";
    cout << endl;
}