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.
#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; }
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; } |