B - Shuffle

cpaojitp1

最終更新日

問題

https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/9/ITP1_9_B (新しいタブで開く)

問題文

nn 枚のカードをシャッフルする。
1 回のシャッフルでは、下からカードを hh 枚取り出し、それをカードの上に積み上げる。

例えば、下から順に abcdeefab だった場合、 h=4h = 4 なら eefababcd になる。

山の最初の並びと hh を読み込んで、最後の並びを出力してね。

複数のテストケースが与えられる。
- が入力されたら終了。

制約

サンプル

I/O 1

aabc 3 1 2 1 vwxyz 2 3 4 -
aabc xyzvw

1 つ目のテストケースでは、 aabc が与えられて、シャッフルは 3 回行う。
まず 1 枚取り出し、次に 2 枚取り出し、最後に 1 枚取り出す。
最終的に aabc になる。

考察

結合してシミュレーションするのを頑張る。
制約が小さめなので十分間に合う。

コード

https://onlinejudge.u-aizu.ac.jp/status/users/a01sa01to/submissions/1/ITP1_9_B/judge/6370893/C++17 (新しいタブで開く)

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; }