Codeforces 792Bのカウントアウト韻
カウントアウト韻
nは子どもたちがサークルに立って数え歌を果たしています。子どもたちは、1からnまで時計回りに番号が付けられています。初めに、最初の子がリーダーと考えられています。ゲームは、k個のステップで再生されます。i番目のステップではリーダーは次の人から始めて、時計回りの順で人々をaiはアウトカウントします。最後の一つはリーダーが解消されることで指される、彼の後に次のプレーヤーは、新しいリーダーになります。
例えば、番号[8、10、13、14、16]を持つ子供は、現在の円に、リーダーがカウントアウト韻端子16には、排除される人その後、子13と12 = aiはあります。児童8は、リーダーになります。
あなたは子供の数がステップごとに除去すべき印刷し、プログラムを記述する必要があります。
入力
最初の行は、2つの整数n及びk含有(2≤N≤100を、1≤K≤N - 1)。
数字は、A2、...は、AK(1≤≤109 AI)A1整数次の行がkを含んでいます。
出力
プリントk個、子供の数にi番目の1に相当するが、i番目のステップで解消します。
例として
、入力
7 5
10 4 11 4 1
出力
4 2 5 6 1
入力
3 2
2 5
出力
3 2
注
レッツは、最初の例を考えてみます。
子供4が除去された最初のステップでは、子供5は、リーダーになります。
子供2が除去された第二段階では、子供3がリーダーになります。
子5が除去される第三のステップにおいて、子6は、リーダーとなります。
子供6が除去された第4のステップで、子供7がリーダーになります。
最終工程で子供1、子供3がリーダーとなり、除去される。
上代码
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
#define int long long int
#define double long double
#define pb push_back
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define F first
#define S second
#define sz(a) (int)((a).size())
#define fuck() cout<<"--------"<<endl
#define see(x) cout<<#x<<" = "<<x<<endl
#define see2(x,y) cout<<#x<<" = "<<x<<"::"<<#y<<" = "<<y<<endl
#define oset tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
const int mod=1000000007;
typedef pair<int,int> pii;
const int maxn=1e5+5;
int32_t main()
{
ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0);
int n,k;
cin>>n>>k;
int a[n];
oset s;
for(int i=1;i<=n;i++){
s.insert(i);
}
int cur=0;
for(int i=0;i<k;i++){
cin>>a[i];
int dis=(cur+a[i])%sz(s);
int to=*s.find_by_order(dis);
cout<<to<<' ';
cur=dis;
s.erase(to);
}
}