Advertisement
Guest User

Untitled

a guest
Oct 27th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. //flappy bird
  2.  
  3. #include <iostream>
  4. #include <vector>
  5.  
  6. struct Dozwolona
  7. {
  8. int x;
  9. std::vector<int> punkty;
  10. };
  11.  
  12. void usun_poza_zakresem(std::vector<int>& punkty, int mini, int maxi)//zoptymalizuj
  13. {
  14. for (int i = 0; i < punkty.size(); i++)
  15. if (punkty[i]>maxi || punkty[i] < mini)
  16. punkty.erase(punkty.begin() + i);
  17.  
  18. }
  19.  
  20. bool sprawdz_droge(std::vector<Dozwolona>& dozwolone)
  21. {
  22. unsigned int mini, maxi;
  23. mini = maxi = 0;
  24. //sprawdz pierwsza
  25. usun_poza_zakresem(dozwolone[0].punkty, -dozwolone[0].x, dozwolone[0].x);
  26. if (dozwolone[0].punkty.size() == 0)//zadne nie sa dostepne
  27. return false;
  28.  
  29. if(dozwolone.size() > 1)
  30. for (size_t i = 1; i < dozwolone.size(); i++)
  31. {
  32. int dx = dozwolone[i].x - dozwolone[i - 1].x;
  33. int maxi = dozwolone[i - 1].punkty[dozwolone[i - 1].punkty.size() - 1];
  34. int mini = dozwolone[i - 1].punkty[0];
  35.  
  36. usun_poza_zakresem(dozwolone[i].punkty, mini - dx, maxi + dx);
  37.  
  38. if (dozwolone[i].punkty.size() == 0)//zadne nie sa dostepne
  39. return false;
  40. }
  41.  
  42. return true;
  43. }
  44.  
  45. int main()
  46. {
  47. unsigned int ilosc_przeszkod;
  48. unsigned int cel_x;
  49.  
  50. std::cin >> ilosc_przeszkod >> cel_x;
  51.  
  52. if (ilosc_przeszkod > 0)
  53. {
  54.  
  55. std::vector<Dozwolona> dozwolone(ilosc_przeszkod);
  56.  
  57. for (auto& dozwolona : dozwolone)
  58. {
  59. int x, y1, y2;
  60.  
  61. std::cin >> x >> y1 >> y2;
  62.  
  63. for (y1++; y1 < y2; y1++)
  64. if ((y1 + x) % 2 == 0)
  65. dozwolona.punkty.push_back(y1);
  66.  
  67. dozwolona.x = x;
  68.  
  69. }
  70.  
  71. if (sprawdz_droge(dozwolone))
  72. {
  73. unsigned int wynik;
  74.  
  75. if (dozwolone.size()>1)
  76. wynik = dozwolone[dozwolone.size() - 1].punkty[0] + dozwolone[dozwolone.size() - 1].x;
  77. else
  78. wynik = dozwolone[0].punkty[0] + dozwolone[0].x;
  79.  
  80. wynik /= 2;
  81.  
  82. std::cout << wynik << '\n';
  83. }
  84. else
  85. {
  86. std::cout << "NIE\n";
  87. }
  88.  
  89. }
  90.  
  91. else std::cout << "0\n";
  92.  
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement