1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdlib.h>

#define LEFT		'L'
#define RIGHT		'P'
#define BOOL		char
#define TRUE		1
#define FALSE		0


int main(void)
{
	uint_fast32_t n;
	register uint_fast32_t off_l, off_r, last_col;
	register uint_fast32_t *count;
	register char *str;


	/* Input: */

	scanf("%u\n", &n);
	str		= (char *) malloc(n + 1);
	count	= (uint_fast32_t *)calloc(n, sizeof(uint_fast32_t));
	off_l	= 0;
	off_r	= (n - 1);

	fgets(str, n + 1, stdin);

	//Main loop:

	while (off_l < off_r)
	{
		register uint_fast32_t k;
		BOOL start_l = TRUE;

		last_col = off_r;

//		printf_s("%.*s\n", off_r - off_l + 1, str + off_l);

		for (k = off_l; k < off_r; ++k)
		{
			//Getting rid of leading L's:
			if (str[k] == RIGHT)
			{
				if(start_l)
					off_l = k;

				start_l = FALSE;
			}

			//Collision: if yes:
			if (str[k + 1] == LEFT && str[k] == RIGHT)
			{
				str[k + 1] = RIGHT;
				str[k] = LEFT;

				++count[k + 1];
				++count[k];

				last_col = k;
			}
		}

		off_r = last_col;
		if (start_l)
			break;
	}

	//Output:

	for (int i = 0; i < n; ++i)
	{
		fprintf(stdout, "%u ", count[i]);
	}

	return 0;
}