https://onlinejudge.u-aizu.ac.jp/beta/room.html#ACPC2018Day2/problems/C
考察過程
1. サンプルを眺めて考えると、スワップというより回転のように見える
2. ちょっと例を出して考えても回転みたい
3. 先頭が何かを覚えておいて回転させよう
解法
https://onlinejudge.u-aizu.ac.jp/beta/review.html#ACPC2018Day2/3149595
スワップを回転と考えて解く。
現在の先頭をtopとする(0-indexed)
クエリ0
topからk番目の数はtop+k-1となる。
しかし、一周している可能性があるので、modNとして、(top+k-1)%Nである。
1-indexedにして答えると答え。
クエリ1
k番目とk+1番目で分けて入れ替えるが、これはk回左に回転させると言い換えられる。
なので、top+=kとすればいい。
一周した場合も考えてmodNとする。
int N, Q; int top = 0; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N >> Q; rep(_, 0, Q) { int t, k; cin >> t >> k; if (t == 0) { int ans = (top + k - 1) % N; printf("%d\n", ans + 1); } else { top = (top + k) % N; } } }