Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8. Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
  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
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
// Autor: Karol Kopczy�ski (KarixD)

#include <iostream>

using namespace std;

void mrowki(int ilosc, string kierunek)
{
    // Zadeklarowanie tablicy z pozycjami mr�wek i ich ustawienie
    // (D�ugo�� dw�ch pozycji jest r�wna jednej jednostce na osi liczbowej z zadania)
    int pozycja[ilosc];
    for(int i=0; i<ilosc; i++)
    {
        pozycja[i]=i*2;
    }

    // Zadeklarowanie tablicy z odbiciami mr�wek i jej wyzerowanie
    int odbicia[ilosc];
    for(int i=0; i<ilosc; i++)
    {
        odbicia[i]=0;
    }

    // Algorytm iteracyjny wykouj�cy si� do czasu, a� wszystkie mr�wki zostan� odbite
    bool czy_wszystkie_odbite = false;
    while (!czy_wszystkie_odbite)
    {
        // Na wej�ciu zak�adamy �e s� wszystkie odbite, dop�ki nie natrafimy na przypadek, gdzie jaka� para mr�wek nie znajduje si� naprzeciwko siebie
        czy_wszystkie_odbite=true;

        // Iteracja po wszystkich mr�wkach
        for(int i=0; i<ilosc; i++)
        {
            if(kierunek[i] == 'P') //Dla i-tej mr�wki skierowanej w prawo
            {
                if(i!=ilosc-1) // Nie sprawdzamy czy mr�wka ma par� po prawej, je�li jest ostatnia
                {
                    if(kierunek[i+1] == 'L') // Sprawdzamy czy kolejna mr�wka jest skierowana w stron� i-tej
                    {
                        czy_wszystkie_odbite=false;
                    }
                    if(pozycja[i]+1 == pozycja[i+1])
                    {
                        // Odbijanie i-tej mr�wki i mr�wki od kt�rej sie ona odbi�a
                        kierunek[i]='L';
                        kierunek[i+1]='P';
                        odbicia[i]++;
                        odbicia[i+1]++;
                    }
                    else
                    {
                        // Kontynuowanie ruchu mr�wki
                        pozycja[i]++;
                    }
                }
                else
                {
                    pozycja[i]++;
                }
            }
            else //Dla i-tej mr�wki skierowanej w lewo
            {
                if(i!=0) // Nie sprawdzamy czy mr�wka ma par� po lewej, je�li jest pierwsza
                {
                    if(kierunek[i-1] == 'P') // Sprawdzamy czy wcze�niejsza mr�wka jest skierowana w stron� i-tej
                    {
                        czy_wszystkie_odbite=false;
                    }
                    if(pozycja[i]-1 == pozycja[i-1])
                    {
                        // Odbijanie i-tej mr�wki i mr�wki od kt�rej sie ona odbi�a
                        kierunek[i]='P';
                        kierunek[i-1]='L';
                        odbicia[i]++;
                        odbicia[i-1]++;
                    }
                    else
                    {
                        // Kontynuowanie ruchu mr�wki
                        pozycja[i]--;
                    }
                }
                else
                {
                    pozycja[i]--;
                }
            }
        }
    }

    // Wypisanie ilo�ci odbi� dla wszystkich mr�wek po wykonaniu algorytmu
    for(int i=0; i<ilosc; i++)
    {
        cout << odbicia[i] << " ";
    }
}

int main()
{
    // Wprowadzenie ilo�ci mr�wek
    int ilosc;
    cin >> ilosc;

    // Wprowadzenie kierunku mr�wek
    string kierunek;
    cin >> kierunek;

    mrowki(ilosc, kierunek);

    return 0;
}