Advertisement
Guest User

4chan prog "challenge"

a guest
May 26th, 2018
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. include "stdafx.h"
  2. #include <cstdlib>
  3. #include <iostream>
  4.  
  5.  
  6. class valley_t
  7. {
  8. public:
  9.     int maximum1;
  10.     int maximum2;
  11.     int minimum;
  12.     int minmaxval;
  13.  
  14.     bool isvalid;
  15.     valley_t()
  16.     {
  17.         isvalid = false;
  18.     }
  19. };
  20.  
  21. int main()
  22. {
  23.     //set to whatever you like, be reasonable about the sizes tho
  24.     const int MAXVAL = 100;
  25.     const int N = 12;
  26.  
  27.     int array[N];
  28.  
  29.     // Init array
  30.     for (int i = 0; i < N; ++i)
  31.     {
  32.         array[i] = rand() % MAXVAL;     // not perfectly uniform, be careful here
  33.         std::cout << "array[" << i << "] = " << array[i] << "\n";
  34.     }
  35.  
  36.     int minima[N] = {};
  37.     int cntr_min = 0;
  38.     for (int i = 1; i < N - 1; ++i)
  39.     {
  40.         if (array[i - 1] > array[i] && array[i] < array[i + 1])
  41.         {
  42.             if (array[i] != 0)
  43.             {
  44.                 minima[cntr_min] = i;
  45.                 ++cntr_min;
  46.             }
  47.         }
  48.     }
  49.  
  50.     valley_t valley[N];
  51.     int cntr_valley = 0;
  52.     for (int i = 0; i < N; ++i)
  53.     {
  54.         if (minima[i] != 0)
  55.         {
  56.             int r_max = minima[i]+1;
  57.             int l_max = minima[i]-1;
  58.             int k = l_max;
  59.             while (array[k]!=0 && k!=-1)
  60.             {
  61.                 if (array[k] > array[l_max])
  62.                     l_max = k;
  63.                 --k;
  64.             }
  65.             k = r_max;
  66.             while (array[k]!=0 && k != N)
  67.             {
  68.                 if (array[k] > array[r_max])
  69.                     r_max = k;
  70.                 ++k;
  71.             }
  72.  
  73.             for (int j = i + 1; j < N; ++j)
  74.             {
  75.                 if (minima[j] != 0)
  76.                 {
  77.                     if (minima[j] < r_max)
  78.                         minima[j] = 0;
  79.                 }
  80.             }
  81.  
  82.             valley[cntr_valley].maximum1 = l_max;
  83.             valley[cntr_valley].maximum2 = r_max;
  84.             valley[cntr_valley].minimum = minima[i];
  85.             valley[cntr_valley].minmaxval = (array[l_max]>array[r_max])? array[r_max] : array[l_max];
  86.             valley[cntr_valley].isvalid = true;
  87.             ++cntr_valley;
  88.         }
  89.     }
  90.  
  91.     int Total = 0;
  92.     for (int i = 0; i < N; ++i)
  93.     {
  94.         if (valley[i].isvalid)
  95.         {
  96.             int maxwater = valley[i].minmaxval;
  97.             for (int j = valley[i].maximum1 + 1; j < valley[i].maximum2; ++j)
  98.             {
  99.                 int tmp = maxwater - array[j];
  100.                 if (tmp > 0)
  101.                     Total += tmp;
  102.             }
  103.         }
  104.     }
  105.  
  106.     std::cout << "Total water contained: " << Total << "\n";
  107.  
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement