fork(2) download
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. bool czy_dobrze(int tab[2][1000], int i, int rozmiar)
  5. {
  6. for (int j=i-rozmiar; j<i; j++)
  7. {
  8. if((tab[0][j] == tab[0][i]) && (tab[1][j] == tab [1][i]))
  9. return false;
  10. }
  11. return true;
  12. }
  13.  
  14. void zmien (int &jak, int &px, int &py, int i)
  15. {
  16. using std::swap;
  17. jak=jak%2;
  18. if (jak==i)
  19. {
  20. px*=-1;
  21. py*=-1;
  22.  
  23. }
  24. swap (px,py);
  25. }
  26.  
  27. void ruch(int poz[2][1000], int px, int py, int i)
  28. {
  29. poz [0][i]=poz[0][i-1]+px;
  30. poz [1][i]=poz[1][i-1]+py;
  31. }
  32.  
  33. int main()
  34. {
  35. using namespace std;
  36. string q;
  37. int tab[2][1000];
  38. tab[0][0]=0;
  39. tab[1][0]=0;
  40. int px=1;
  41. int py=0; //poczatkowy kierunek ruchu
  42. int rozmiar;
  43. int orient = 1;
  44. char akcja;
  45. int razy,ile;
  46. cin >> ile;
  47. for (int k=0; k < ile; k++)
  48. {
  49. cin >> razy;
  50. rozmiar = 0;
  51. for (int i = 1; i <= razy; i++)
  52. {
  53. cin>>akcja;
  54. switch (akcja)
  55. {
  56. case 'L':
  57. {
  58. zmien(orient,px,py,0);
  59. orient++;
  60. break;
  61. }
  62. case 'R':
  63. {
  64. zmien(orient,px,py,1);//zmiana kierunku przy skrecie w prawo
  65. orient++;
  66. break;
  67. }
  68. case 'E': rozmiar++ ; break;
  69. }
  70. ruch(tab,px,py,i);
  71. if (!czy_dobrze(tab,i,rozmiar))
  72. {
  73. if (i<razy)cin >> q;
  74. cout << i <<endl;
  75. break;
  76. }
  77. if(i == razy) cout << "TAK" << endl;
  78. }
  79.  
  80. }
  81.  
  82. return 0;
  83. }
  84.  
Success #stdin #stdout 0s 4120KB
stdin
Standard input is empty
stdout
Standard output is empty