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

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

JOI 一次予選 2020 (第 2 回) B - 文字列の反転 (7Q, 難易度 2)

reverse する系の問題

問題概要

長さ  N の文字列  S について、 A 文字目から  B 文字目までを反転して得られる文字列を出力せよ。

制約

  •  1 \le A \le B \le N \le 200

解法

C++ でプログラムを書くときは、通常文字列は 0 始まりですので、 A, B からあらかじめ 1 引いておきます。

その後は、次のように実装すればよいでしょう。


  •  S 0 文字目から、 A-1 文字目までを出力する
  •  S B 文字目から、 A 文字目までを降順に出力する
  •  S B+1 文字目から、 N-1 文字目までを出力する

for 文を用いて実装できます。降順に出力するときは、添字 i をデクリメント (--i というように) していきます。

コード

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

int main() {
    int N, A, B;
    string S;
    cin >> N >> A >> B >> S;
    
    --A, --B;
    for (int i = 0; i < A; ++i) cout << S[i];
    for (int i = B; i >= A; --i) cout << S[i];
    for (int i = B+1; i < N; ++i) cout << S[i];
    cout << endl;
}