aboutsummaryrefslogtreecommitdiff
path: root/other/num_people_aware_secret.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'other/num_people_aware_secret.cpp')
-rw-r--r--other/num_people_aware_secret.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/other/num_people_aware_secret.cpp b/other/num_people_aware_secret.cpp
new file mode 100644
index 0000000..80a4b91
--- /dev/null
+++ b/other/num_people_aware_secret.cpp
@@ -0,0 +1,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);
+}