Official

D - 坊主めくり/Bozu Mekuri Editorial by kyopro_friends


場札の枚数と各プレイヤーの手札の枚数を記録しながら実際にシミュレーションを行います。

山札を上から順に処理をすることにし、上から \(i\) 枚目の山札をどのプレイヤーが引くかを、\(i\)\(N\) で割ったあまりを用いて計算すると実装が簡潔になります。

実装例(C)

#include<stdio.h>

char s[200010];
int cnt[200010];
int main(){
	int n,m;
	scanf("%d%d %s",&n,&m,s);
	
	int ba=0;
	for(int i=0;i<m;i++){
		cnt[i%n]++;
		if(s[i]=='+'){
			cnt[i%n]+=ba;
			ba=0;
		}else if(s[i]=='-'){
			ba+=cnt[i%n];
			cnt[i%n]=0;
		}
	}
	
	for(int i=0;i<n;i++)printf("%d\n",cnt[i]);
}

posted:
last update: