シャッフルカードジム-247729C(ロープ、バランスの取れた木)

ゲームには常にランダム性がたくさんあるので、エディはトランプゲームをするのが好きです。ほとんどのカードゲームでは、ゲームの最初のステップはカードをシャッフルすることです。そして、ほとんどの場合、ゲームのランダム性はこのステップからのものです。しかし、エディは、シャッフルがうまく行われなかった場合、カードの順序が予測可能であると疑っています!

それを証明するために、エディはカードをシャッフルしたいと考えており、カードの最終的な順序を予測しようとします。実際、エディはカードをシャッフルする唯一の方法を知っています。それは、いくつかの真ん中の連続したカードを取り、それらを残りの上に置くことです。カードをシャッフルするとき、エディはこの手順を繰り返し続けます。数ラウンド後、エディはカードの順番を見失い、彼の仮定が間違っていると信じています。エディの友達として、あなたは彼がそのような愚かなことをしているのを見ていて、彼がしたすべての動きを簡単に覚えています。今度は、エディにカードの最終的な順序を、彼を驚かせる魔法として伝えます。

エディは最初、カードが上から下に1からNまでの番号であることを示しました。

たとえば、5枚のカードがあり、Eddyは1回のシャッフルを行いました。彼は上から2番目のカードから上から4番目のカード(1からインデックス付け)を取り出し、残りのカードの上に置きます。その場合、カードの最終的な順序は[2,3,4,1,5]になります。

入力
最初の行には、スペースで区切られた2つの整数Nが含まれています。Mは、カードの数とEddyが実行したシャッフルの数を示します。

次のM行のそれぞれには、スペースで区切られた2つの整数piが含まれています。カード。

1≤Nは、M≤105
1≤pi≤N
1≤si≤N-PI + 1
出力
を出力1本のライン上から下へのカードの最終的な順序を示すN個のスペースで区切られた整数を含みます。

実施例
インプット
5 1
2 3
出力
1 2 3 4 5
入力
5 2
2 3
2 3
出力
3 4 1 2 5
入力
5 3
2 3
1 4
2 4
出力
3 4 1 5 2

質問の意味:
シーケンス、段落が中央から取られて前に配置されるたびに、最後のシーケンスが必要です。

アイデア:
バランスの取れた木やロープで実現できます

#include <ext/rope>
#include <cstdio>
#include <algorithm>
#include <iostream>

using namespace __gnu_cxx;
using namespace std;

int main() {
    
    
    int n,m;scanf("%d%d",&n,&m);
    rope<int>now;
    for(int i = 1;i <= n;i++) now.push_back(i);
    for(int i = 1;i <= m;i++) {
    
    
        int x,y;scanf("%d%d",&x,&y);
        rope<int>tmp;
        now = now.substr(x - 1,y) + now.substr(0,x - 1) + now.substr(x + y - 1,n - (x + y - 1));
        
    }
    for(int i = 0;i < n;i++) {
    
    
        cout << now.at(i) << " ";
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/tomjobs/article/details/108998933
おすすめ