Codeforces 792Bのカウントアウト韻

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

出版元の記事 ウォンの賞賛1 ビュー14

おすすめ

転載: blog.csdn.net/Rex_Xing_yi_li/article/details/104106457