問題
https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/9/ITP1_9_B (新しいタブで開く)
問題文
枚のカードをシャッフルする。
1 回のシャッフルでは、下からカードを 枚取り出し、それをカードの上に積み上げる。
例えば、下から順に abcdeefab
だった場合、 なら eefababcd
になる。
山の最初の並びと を読み込んで、最後の並びを出力してね。
複数のテストケースが与えられる。
-
が入力されたら終了。
制約
- テストケース数は を超えない
サンプル
I/O 1
aabc 3 1 2 1 vwxyz 2 3 4 -
aabc xyzvw
1 つ目のテストケースでは、 aabc
が与えられて、シャッフルは 3 回行う。
まず 1 枚取り出し、次に 2 枚取り出し、最後に 1 枚取り出す。
最終的に aabc
になる。
考察
結合してシミュレーションするのを頑張る。
制約が小さめなので十分間に合う。
コード
int main() { while (true) { string s; cin >> s; if (s == "-") break; int m; cin >> m; rep(_, m) { int h; cin >> h; s = s.substr(h) + s.substr(0, h); } cout << s << endl; } return 0; }