Advertisement
PowerSl1de

Untitled

Apr 1st, 2021
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.40 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. int current_draw_sum(const std::vector<int>& rounds_subarray, const size_t start, const size_t end) {
  5.  
  6.     int sum = 0;
  7.  
  8.     for (size_t i = start; i < end; ++i) {
  9.  
  10.         sum += rounds_subarray[i];
  11.  
  12.     }
  13.  
  14.     return sum;
  15.  
  16. }
  17.  
  18. void sum_add_element(int& sum,  const int element) {
  19.  
  20.     if (element > 0) {
  21.  
  22.         ++sum;
  23.  
  24.     } else {
  25.  
  26.         --sum;
  27.  
  28.     }
  29.  
  30. }
  31.  
  32. void sum_sub_element(int& sum,  const int element) {
  33.  
  34.     if (element > 0) {
  35.  
  36.         --sum;
  37.  
  38.     } else {
  39.  
  40.         ++sum;
  41.  
  42.     }
  43.  
  44. }
  45.  
  46. int main() {
  47.  
  48.    size_t number_of_rounds;
  49.  
  50.    std::cin >> number_of_rounds;
  51.  
  52.    std::vector<int> rounds(number_of_rounds);
  53.  
  54.    for (int& round : rounds) {
  55.  
  56.       std::cin >> round;
  57.  
  58.        if (round == 0) {
  59.            round = -1;
  60.        }
  61.  
  62.  
  63.    }
  64.  
  65.    int prev_sum = current_draw_sum(rounds, 0, rounds.size());
  66.  
  67.    if (prev_sum == 0) {
  68.  
  69.        std::cout << rounds.size();
  70.        return 0;
  71.  
  72.    }
  73.  
  74.    for (size_t len = rounds.size() - 1; len > 1; --len) {
  75.  
  76.        bool first_loop = true;
  77.  
  78.        //Проход окном в прямом направлении
  79.        for (size_t pos = 0; pos + len <= rounds.size(); ++pos) {
  80.  
  81.            if (first_loop) {
  82.  
  83.                first_loop = false;
  84.                sum_sub_element(prev_sum, rounds[pos + len]);
  85.  
  86.            } else {
  87.  
  88.                sum_sub_element(prev_sum, rounds[pos - 1]);
  89.                sum_add_element(prev_sum, rounds[pos + len - 1]);
  90.  
  91.            }
  92.  
  93.             if (prev_sum == 0) {
  94.  
  95.                 std::cout << len << std::endl;
  96.                 return 0;
  97.  
  98.             }
  99.  
  100.        }
  101.        //Теперь в обратном но с len меншим на еденицу
  102.        --len;
  103.  
  104.        if (len == 1) {
  105.  
  106.            break;
  107.  
  108.        }
  109.  
  110.        first_loop = true;
  111.  
  112.        for (size_t pos = rounds.size() - len; pos >= 0 && pos != std::numeric_limits<size_t>::max(); --pos) {
  113.  
  114.            if (first_loop) {
  115.  
  116.                first_loop = false;
  117.                sum_sub_element(prev_sum, rounds[pos - 1]);
  118.  
  119.  
  120.            } else {
  121.  
  122.                sum_add_element(prev_sum, rounds[pos]);
  123.                sum_sub_element(prev_sum, rounds[pos + len]);
  124.  
  125.            }
  126.  
  127.            if (prev_sum == 0) {
  128.  
  129.                std::cout << len << std::endl;
  130.                return 0;
  131.  
  132.            }
  133.  
  134.        }
  135.  
  136.    }
  137.  
  138.    std::cout << 0;
  139.  
  140.    return 0;
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement