Advertisement
VSZM

Folyamallasok

Nov 22nd, 2015
161
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. /*
  5. Bemenet         Kimenet
  6. 11              1
  7. 750             5 6
  8. 810             6 1100
  9. 920            
  10. 1000
  11. 780
  12. 920
  13. 1100
  14. 720
  15. 900
  16. 950
  17. 820
  18.  
  19. példa 2:
  20. Bemenet         Kimenet
  21. 10              2
  22. 810             5 6
  23. 920             6 1100
  24. 100             8 10
  25. 780             9 950
  26. 920
  27. 1100
  28. 720
  29. 900
  30. 950
  31. 920
  32.  
  33. példa 3:
  34. Bemenet         Kimenet
  35. 2               0
  36. 780
  37. 560
  38. */
  39.  
  40. int main()
  41. {
  42.     const int MAX_MERES = 10000;
  43.     int N;
  44.  
  45.     cin >> N;
  46.     int db = 0;
  47.     int maxok[MAX_MERES];
  48.     int maxPoziciok[MAX_MERES];
  49.     int kezdetek[MAX_MERES];
  50.     int vegek[MAX_MERES];
  51.     int actKezdo = -1;
  52.     int actMax = -1;
  53.     int actMaxPos = -1;
  54.     bool vanBenneEgyes = false;
  55.  
  56.     int i;
  57.     for (i = 1; i <= N; ++i)// N érték beolvasása, feldolgozása
  58.     {
  59.         int act;
  60.         cin >> act;
  61.  
  62.         if (act < 800)// nincs árvíz, korábbi folyószakasz nullázása
  63.         {
  64.             if (actKezdo != -1 && !vanBenneEgyes) // Ha az ezelőtti érték egy folyószakasz része volt, és nem volt benne kettesnél kisebb fokozat, akkor elmentjük
  65.             {
  66.                 maxok[db] = actMax;
  67.                 maxPoziciok[db] = actMaxPos;
  68.                 kezdetek[db] = actKezdo;
  69.                 vegek[db] = i - 1;// az eggyel ezelőtti érték volt a vége
  70.                 db++;
  71.             }
  72.             actKezdo = -1;
  73.             actMax = -1;
  74.             actMaxPos = -1;
  75.             vanBenneEgyes = false;
  76.         }
  77.         else // act >= 800
  78.         {
  79.             if (actKezdo == -1)// új folyószakasz kezdődik
  80.             {
  81.                 actKezdo = i;
  82.             }
  83.             if (act > actMax)// Az aktuális állás nagyobb, mint a folyószakasz korábbi legnagyobbja
  84.             {
  85.                 actMax = act;
  86.                 actMaxPos = i;
  87.             }
  88.  
  89.             if (act < 900) // Nem éri el a kettes szintet a folyószakasz aktuális eleme
  90.             {
  91.                 vanBenneEgyes = true;
  92.             }
  93.         }
  94.     }
  95.  
  96.     if (actKezdo != -1 && !vanBenneEgyes) // Elképzelhetp, hogy az input sorozat végén is egy folyószakasz volt, ezt is lekezeljük
  97.     {
  98.         maxok[db] = actMax;
  99.         maxPoziciok[db] = actMaxPos;
  100.         kezdetek[db] = actKezdo;
  101.         vegek[db] = i - 1;
  102.         db++;
  103.     }
  104.  
  105.     cout << db << endl;
  106.     for (i = 0; i < db; ++i)
  107.     {
  108.         cout << kezdetek[i] << " " << vegek[i] << endl;
  109.         cout << maxPoziciok[i] << " " << maxok[i] << endl;
  110.     }
  111.    
  112. }
Advertisement
RAW Paste Data Copied
Advertisement