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