aboutsummaryrefslogtreecommitdiff
path: root/store/works/solutions/leetcode/cpp/1052.cpp
blob: 583e2173f25cdb66032086a65a159d5e42388687 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <algorithm>
// #include <iostream>
#include <vector>

using std::vector;

class Solution {
public:
  int maxSatisfied(vector<int> &customers, vector<int> &grumpy, int X) {
    int customer_count = customers.size();

    int total_customer_count = 0;
    int total_unsatisfied_customer_count = 0;

    for (int i = 0; i < X; i++) {
      total_customer_count += customers[i];
      if (grumpy[i]) {
        total_unsatisfied_customer_count += customers[i];
      }
    }

    int current_suppress_customer_count = total_unsatisfied_customer_count;
    int max_suppress_customer_count = total_unsatisfied_customer_count;

    for (int i = X; i < customer_count; i++) {
      total_customer_count += customers[i];
      if (grumpy[i]) {
        total_unsatisfied_customer_count += customers[i];
        current_suppress_customer_count += customers[i];
      }

      if (grumpy[i - X]) {
        current_suppress_customer_count -= customers[i - X];
      }

      max_suppress_customer_count = std::max(max_suppress_customer_count,
                                             current_suppress_customer_count);
    }

    // std::cout << total_customer_count << '\n';
    // std::cout << total_unsatisfied_customer_count << '\n';
    // std::cout << max_suppress_customer_count << '\n';

    return total_customer_count - total_unsatisfied_customer_count +
           max_suppress_customer_count;
  }
};