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
// Jan Zakrzewski
#include <bits/stdc++.h>
using namespace std;

int constexpr N = 3e5 + 10;
int n; // liczba mrówek, jak w treści zadania
char s[N]; // początkowe zwroty mrówek, jak w treści zadania
int a[N]; // 1 <= i <= n, a[i] = liczba mrówek na lewo od i-tej mrówki, które początkowo idą w prawo
int b[N]; // 1 <= i <= n, b[i] = liczba mrówek na prawo od i-tej mrówki, które początkowo idą w lewo
int odp[N]; // 1 <= i <= n, odp[i] = liczba odbić i-tej mrówki

/* Saved for potential future debugging
int L(int, int);
int P(int, int);

int L(int z_lewej, int z_prawej) {
    if(z_lewej == 0) return 0;
    else return 1 + P(z_lewej - 1, z_prawej);
}

int P(int z_lewej, int z_prawej) {
    if(z_prawej == 0) return 0;
    else return 1 + L(z_lewej, z_prawej - 1);
}*/

int LL(int z_lewej, int z_prawej) {
    if(z_lewej > z_prawej) return 2 * z_prawej + 1;
    else return 2 * z_lewej;
}

int PP(int z_lewej, int z_prawej) {
    if(z_lewej < z_prawej) return 2 * z_lewej + 1;
    else return 2 * z_prawej;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> n;
    cin >> s; for(int i = n; i >= 1; --i) s[i] = s[i-1];

    a[1] = 0;
    for(int i = 2; i <= n; ++i) {
        a[i] = a[i - 1];
        if(s[i - 1] == 'P')
            ++a[i];
    }

    b[n] = 0;
    for(int i = n - 1; i >= 1; --i) {
        b[i] = b[i + 1];
        if(s[i + 1] == 'L')
            ++b[i];
    }

    for(int i = 1; i <= n; ++i) {
        if(s[i] == 'L') cout << LL(a[i], b[i]) << " ";
        else if(s[i] == 'P') cout << PP(a[i], b[i]) << " ";
        else cout << "What are you doing? ";
    }
    cout << "\n";

    return 0;
}