[AtCoder] ABC 199 C – IPFL
問題
方針
前半の文字と後半の文字をそれぞれ \( L, R \) とします.また,\( T_i = 2\) となる回数を数えて,偶奇によって操作を行う文字列を決定します.
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int N; void swap(string& L, string& R, int A, int B) { if (B < N) { char t = L[A]; L[A] = L[B]; L[B] = t; } else if (A < N) { char t = L[A]; L[A] = R[B - N]; R[B - N] = t; } else { char t = R[A - N]; R[A - N] = R[B - N]; R[B - N] = t; } } int main() { int Q, T, A, B; string S; cin >> N >> S >> Q; string L = S.substr(0, N); string R = S.substr(N); int cnt = 0; for (int i = 0; i < Q; i++) { cin >> T >> A >> B; A--; B--; if (T == 1) { if (cnt % 2 == 0) { swap(L, R, A, B); } else { swap(R, L, A, B); } } else { cnt++; } } if (cnt % 2 == 0) { cout << L << "" << R << "\n"; } else { cout << R << "" << L << "\n"; } return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません