Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- include "stdafx.h"
- #include <cstdlib>
- #include <iostream>
- class valley_t
- {
- public:
- int maximum1;
- int maximum2;
- int minimum;
- int minmaxval;
- bool isvalid;
- valley_t()
- {
- isvalid = false;
- }
- };
- int main()
- {
- //set to whatever you like, be reasonable about the sizes tho
- const int MAXVAL = 100;
- const int N = 12;
- int array[N];
- // Init array
- for (int i = 0; i < N; ++i)
- {
- array[i] = rand() % MAXVAL; // not perfectly uniform, be careful here
- std::cout << "array[" << i << "] = " << array[i] << "\n";
- }
- int minima[N] = {};
- int cntr_min = 0;
- for (int i = 1; i < N - 1; ++i)
- {
- if (array[i - 1] > array[i] && array[i] < array[i + 1])
- {
- if (array[i] != 0)
- {
- minima[cntr_min] = i;
- ++cntr_min;
- }
- }
- }
- valley_t valley[N];
- int cntr_valley = 0;
- for (int i = 0; i < N; ++i)
- {
- if (minima[i] != 0)
- {
- int r_max = minima[i]+1;
- int l_max = minima[i]-1;
- int k = l_max;
- while (array[k]!=0 && k!=-1)
- {
- if (array[k] > array[l_max])
- l_max = k;
- --k;
- }
- k = r_max;
- while (array[k]!=0 && k != N)
- {
- if (array[k] > array[r_max])
- r_max = k;
- ++k;
- }
- for (int j = i + 1; j < N; ++j)
- {
- if (minima[j] != 0)
- {
- if (minima[j] < r_max)
- minima[j] = 0;
- }
- }
- valley[cntr_valley].maximum1 = l_max;
- valley[cntr_valley].maximum2 = r_max;
- valley[cntr_valley].minimum = minima[i];
- valley[cntr_valley].minmaxval = (array[l_max]>array[r_max])? array[r_max] : array[l_max];
- valley[cntr_valley].isvalid = true;
- ++cntr_valley;
- }
- }
- int Total = 0;
- for (int i = 0; i < N; ++i)
- {
- if (valley[i].isvalid)
- {
- int maxwater = valley[i].minmaxval;
- for (int j = valley[i].maximum1 + 1; j < valley[i].maximum2; ++j)
- {
- int tmp = maxwater - array[j];
- if (tmp > 0)
- Total += tmp;
- }
- }
- }
- std::cout << "Total water contained: " << Total << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement