Official

B - A Reverse Editorial by physics0523


受け取った \(S\) に変更を加えずにループを上手く回して正しく出力するという方法もありますが、今回は、文字列の \(l\) 文字目から \(r\) 文字目を手軽に反転する方法を紹介します。
以下の手順で実現可能です。

  1. \(p=l,q=r\) とする。
  2. 文字列の \(p\) 文字目と \(q\) 文字目とを入れ替える。
  3. \(p\)\(1\) 加算、 \(q\)\(1\) 減算する。
  4. \(p < q\) となっている限り、 2. と 3. を繰り返す。

なお、多くの言語では文字列の始まりは \(1\) 文字目ではなく \(0\) 文字目として扱われますが、これには予め受け取った \(l,r\)\(1\) 減算しておくことで対応可能です。

実装例(C++):

#include<bits/stdc++.h>

using namespace std;

int main(){
  int l,r;
  string s;
  cin >> l >> r >> s;
  l--;r--;
  int p=l,q=r;
  while(p<q){
    swap(s[p],s[q]);
    p++;q--;
  }
  cout << s << '\n';
  return 0;
}

posted:
last update: