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
112
113
#include <stdio.h>
//#include <string.h>

//long mrowa[300001][3];
//long od_lewej,od_prawej,stop=0,dobrze;
//char znak;

char kierunek[300001];
long LM;
long drugi[300001];
long trzeci[300001];


int main()
{
scanf("%ld",&LM);
scanf("%s",&kierunek);

//LM=6;   strcpy(kierunek, "LPPLPL" );  // Odp: 0 1 3 3 2 1
//LM=26;  strcpy(kierunek, "LPPLPPPLLPLPLPLPLPPLLPPPPL"); // Odp: 0 1 3 4 5 7 9 10 10 11 12 12 11 10 9 8 7 6 6 5 3 2 2 2 2 1
//LM=13;  strcpy(kierunek, "LPLPLPPPPPPPL"); // Odp: 0 1 2 3 3 2 2 2 2 2 2 2 1
//LM=20;  strcpy(kierunek, "LLLPPPLLLPPLPPLLLLPL"); // Odp:

/*
od_lewej=1;
od_prawej=LM;

for (long ii=1; ii<=LM; ii++)
	{
	 if (kierunek[ii-1] == 'L') mrowa[ii][0]=-1; // Kierunek
	 else mrowa[ii][0]=1; // Kierunek
	 
	 mrowa[ii][1]=2*ii; // Pozycja mr�wki
	 mrowa[ii][2]=0; // Odbicia
	}

while (!stop)
	{
	 for (int ii=od_lewej; ii<=od_prawej; ii++) mrowa[ii][1] += mrowa[ii][0]; // Przesuni�cie mr�wek
	 
//	 printf("Po przesunieciu, pozycje (od %ld do %ld):\n",od_lewej,od_prawej);
//	 for (int ii=od_lewej; ii<=od_prawej; ii++) printf("%ld ",mrowa[ii][1]);
//	 printf("\nKierunki:\n");
//	 for (int ii=od_lewej; ii<=od_prawej; ii++) printf("%ld ",mrowa[ii][0]);
	 
	 
	 for (int ii=od_lewej; ii<od_prawej; ii++)   if (mrowa[ii][1] == mrowa[ii+1][1] )   // Sprawdzenie, czy si� odbijaj�:
	 	{// Odbicie:
	 	mrowa[ii][2]++;   mrowa[ii+1][2]++;
	 	mrowa[ii][0] *= -1;    mrowa[ii+1][0] *= -1;
	 	}
	 
//	 printf("\nPo sprawdzeniu odbi�, kierunki (od %ld do %ld):\n",od_lewej,od_prawej);
//	 for (int ii=od_lewej; ii<=od_prawej; ii++) printf("%ld ",mrowa[ii][0]);
	 
	 
	 // Sprawdzam, czy t� mr�wk� ju� odpu�ci�:
	 while (mrowa[od_lewej][0] == -1) od_lewej++;
	 while (mrowa[od_prawej][0] == 1) od_prawej--;
	 
//	 printf("\nPo odrzuceniu na granicach: od %ld do %ld.\n",od_lewej,od_prawej);
//	 printf("\nPodaj znak :)\n");
//	 scanf("%c",&znak);
	 
	 if (od_lewej>od_prawej) stop=1;
	}

//printf("Odbicia:\n");
for (int ii=1; ii<=LM; ii++)  printf("%ld ",mrowa[ii][2]);

*/

//// DRUGI SPOS�B:
if (kierunek[0]=='L') drugi[1]=0;
if (kierunek[0]=='P') drugi[1]=1;

for (int ii=2; ii<=LM; ii++)    
	{
	 if ((kierunek[ii-2]=='L')&&(kierunek[ii-1]=='P')) drugi[ii]=drugi[ii-1]+1;
	 else if ((kierunek[ii-2]=='L')&&(kierunek[ii-1]=='L')) drugi[ii]=drugi[ii-1];
	 else if ((kierunek[ii-2]=='P')&&(kierunek[ii-1]=='P')) drugi[ii]=drugi[ii-1]+2;
	 else if ((kierunek[ii-2]=='P')&&(kierunek[ii-1]=='L')) drugi[ii]=drugi[ii-1]+1;
	}

if (kierunek[LM-1]=='P') trzeci[LM]=0;
if (kierunek[LM-1]=='L') trzeci[LM]=1;

for (int ii=LM-1; ii>=1; ii--)
	{
	 if ((kierunek[ii-1]=='L')&&(kierunek[ii]=='P')) trzeci[ii] = trzeci[ii+1] + 1;
	 else if ((kierunek[ii-1]=='P')&&(kierunek[ii]=='P')) trzeci[ii] = trzeci[ii+1];
	 else if ((kierunek[ii-1]=='L')&&(kierunek[ii]=='L')) trzeci[ii] = trzeci[ii+1] + 2;
	 else if ((kierunek[ii-1]=='P')&&(kierunek[ii]=='L')) trzeci[ii] = trzeci[ii+1] + 1;
	}

/*
for (int ii=1; ii<=LM; ii++) if(trzeci[ii]<drugi[ii]) drugi[ii]=trzeci[ii];

dobrze=1;
for (int ii=1; ii<=LM; ii++) if(mrowa[ii][2] != drugi[ii]) dobrze=0;

if (dobrze==1) printf("DOBRZE :)\n");
else printf("ZLE :(\n");
*/
for (int ii=1; ii<=LM; ii++)
	{
	 if (drugi[ii]<trzeci[ii]) printf("%d ",drugi[ii]);
	 else printf("%d ",trzeci[ii]);
	}


return 0;
}