2025-09-09 Daily Challenge
Today I have done leetcode's September LeetCoding Challenge with cpp
.
September LeetCoding Challenge 9
Description
Number of People Aware of a Secret
On day 1
, one person discovers a secret.
You are given an integer delay
, which means that each person will share the secret with a new person every day, starting from delay
days after discovering the secret. You are also given an integer forget
, which means that each person will forget the secret forget
days after discovering it. A person cannot share the secret on the same day they forgot it, or on any day afterwards.
Given an integer n
, return the number of people who know the secret at the end of day n
. Since the answer may be very large, return it modulo 109 + 7
.
Example 1:
Input: n = 6, delay = 2, forget = 4 Output: 5 Explanation: Day 1: Suppose the first person is named A. (1 person) Day 2: A is the only person who knows the secret. (1 person) Day 3: A shares the secret with a new person, B. (2 people) Day 4: A shares the secret with a new person, C. (3 people) Day 5: A forgets the secret, and B shares the secret with a new person, D. (3 people) Day 6: B shares the secret with E, and C shares the secret with F. (5 people)
Example 2:
Input: n = 4, delay = 1, forget = 3 Output: 6 Explanation: Day 1: The first person is named A. (1 person) Day 2: A shares the secret with B. (2 people) Day 3: A and B share the secret with 2 new people, C and D. (4 people) Day 4: A forgets the secret. B, C, and D share the secret with 3 new people. (6 people)
Constraints:
2 <= n <= 1000
1 <= delay < forget <= n
Solution
class Solution {
const int MOD = 1e9 + 7;
public:
int peopleAwareOfSecret(int n, int delay, int forget) {
int sz = forget + 1;
vector<int> newPerson(sz);
newPerson[1] = 1;
int afterDelay = 0;
for(int i = 2; i <= n; ++i) {
afterDelay += newPerson[(i - delay + sz) % sz] - newPerson[(i + 1) % sz];
afterDelay %= MOD;
afterDelay += MOD;
afterDelay %= MOD;
newPerson[i % sz] = afterDelay;
}
int answer = 0;
for(int i = n - forget + 1; i <= n; i++){
answer += newPerson[i % sz];
answer %= MOD;
}
return answer;
}
};
// Accepted
// 82/82 cases passed (1 ms)
// Your runtime beats 68.54 % of cpp submissions
// Your memory usage beats 69.82 % of cpp submissions (9.4 MB)