Advertisement
a53

Broscute

a53
May 18th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.31 KB | None | 0 0
  1. #include <fstream>
  2. #include <algorithm>
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("broscute.in");
  7. ofstream fout("broscute.out");
  8.  
  9. #define DIM 1004
  10.  
  11. struct mutari {
  12. int b, s, d; // b - nr broscutei s - de unde a plecat d - unde a ajuns
  13. } Mutari[DIM * 10];
  14.  
  15. int n, c, pozA[DIM], pozB[DIM], V[DIM], Final[DIM];
  16. /*
  17. V - Configuratia actuala
  18. Final - Configuratia finala
  19. PozA[i] - pozitia broscutei i din configuratia actuala
  20. PozB[i] - pozitia broscutei i din configuratia finala
  21. */
  22.  
  23. int main() {
  24. fin >> n>> c; // Citim numarul de broscute si tipul cerintei
  25.  
  26. ++n; // Nr de Frunze = Nr de Broscute + 1
  27.  
  28. for(int i = 1; i <= n; ++i) {
  29. fin >> V[i]; // Citim configuratia initiala
  30. pozA[V[i]] = i; // Si construim vectorul PozA
  31. }
  32.  
  33. for(int i = 1; i <= n; i++){ // Citim configuratia finala
  34. fin >> Final[i]; // si construim vectorul PozB
  35. pozB[Final[i]] = i;
  36. }
  37.  
  38. int okey = 1; // Presupunem ca inca n-am ajuns la configuratia finala
  39. int mutari = 0; // Initial, numarul de mutari este 0
  40.  
  41. while(okey == 1) { // Cat timp n-am ajuns la configuratia finala
  42. okey = 0;
  43. if(Final[pozA[0]] != 0) { // Daca pozitiile frunzei libere nu corespund in cele doua configuratii
  44. okey = 1;
  45. ++mutari;
  46. Mutari[mutari].b = Final[pozA[0]], //
  47. Mutari[mutari].s = pozA[Final[pozA[0]]], //
  48. Mutari[mutari].d = pozA[0]; // --> Aducem pe pozitia frunzei libere din configuratia noastra
  49. swap(pozA[0], pozA[Final[pozA[0]]]); // broscuta care trebuia sa fie pe acea pozitie in configuratia
  50. swap(V[pozA[0]], V[pozA[Final[pozA[0]]]]);// finala
  51. }
  52. else { // Daca pozitiile frunzei libere din cele doua configuratii corespund
  53. for(int i = 1; i < n; ++i) { // Verificam daca avem broscute care nu sunt pe pozitiile corespunzatoare
  54. if(pozA[i] != pozB[i]) { // Daca broscuta i se afla pe o alta pozitie decat cea care ar trebui
  55. okey = 1;
  56. ++mutari;
  57. Mutari[mutari].b = V[pozA[i]], //
  58. Mutari[mutari].s = pozA[i], //
  59. Mutari[mutari].d = pozA[0]; // ---> O mutam pe pozitia frunzei libere
  60. swap(pozA[0], pozA[i]); //
  61. swap(V[pozA[0]], V[pozA[i]]); //
  62. break;
  63. }
  64. }
  65. }
  66. }
  67.  
  68. if(c == 1) { // Daca tipul de cerinta este 1
  69. fout << mutari << '\n'; // Afisam numarul de mutari
  70. }
  71. else { // Daca tipul de cerinta este 2
  72. if(mutari == 0) {
  73. fout << "broscutele nu se joaca\n";
  74. }
  75. else {
  76. for(int i = 1; i <= mutari; ++i) { // Afisam mutarile
  77. fout << Mutari[i].b << ' ' << Mutari[i].s << ' ' << Mutari[i].d << '\n';
  78. }
  79. }
  80. }
  81.  
  82. fin.close();
  83. fout.close();
  84.  
  85. return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement