aboutsummaryrefslogtreecommitdiff
path: root/num_people_aware_secret.cpp
blob: 80a4b91b33f00df5cacc7a0e56e4dc7071958bff (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
#include "leetcode.h"

class Solution {
public:
  int peopleAwareOfSecret(int n, int delay, int forget) {
    long long sharing = 0, mod = 1000000007;
    deque<int> d{1}, f{1};
    while (--n > 0) {
      if (d.size() >= delay) {
        sharing = (sharing + d.front()) % mod;
        d.pop_front();
      }
      if (f.size() >= forget) {
        sharing = (mod + sharing - f.front()) % mod;
        f.pop_front();
      }
      d.push_back(sharing);
      f.push_back(sharing);
    }
    return accumulate(begin(f), end(f), 0LL) % mod;
  }
};

int main() {
  Solution obj;
  cout << obj.peopleAwareOfSecret(6, 2, 4);
}