意外と実装に手こずった人も多いかもしれない。上手に for
文で実装できる操作に言い換えていこう!
問題概要
長さ の数列 が与えられる。
今、 かつ をみたす 4 つの整数 が与えられる。
数列 の 番目から 番目の項までと、 番目から 番目の項とを入れ替えた数列を求めよ。
考えたこと
操作の内容が複雑なので「このようなことを実現できる関数はないだろうか......」などと考えると詰まってしまう。ここでは、次のように考えよう。次のことを順次行っていけばよいのだ。
- 数列の 番目と 番目を swap する
- 数列の 番目と 番目を swap する
- 数列の 番目と 番目を swap する
- ...
- 数列の 番目と 番目を swap する
つまり、 に対して、数列の 番目と 番目を swap していけばよい。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N, P, Q, R, S; cin >> N >> P >> Q >> R >> S; --P, --Q, --R, --S; // 0 始まりにする vector<int> A(N); for (int i = 0; i < N; i++) cin >> A[i]; for (int i = 0; i <= Q - P; i++) { swap(A[P + i], A[R + i]); } for (int i = 0; i < N; i++) cout << A[i] << " "; cout << endl; }