Problem
You are given two positive integers n
and limit
.
Return the total number of ways to distribute n
candies among 3
children such that no child gets more than limit
candies.
Examples
Example 1:
|
|
Example 2:
|
|
Constraints:
1 <= n <= 10^6
1 <= limit <= 10^6
Similar Problems
Distribute Candies Among Children I Distribute Candies Among Children III
Solution
Method 1 – Inclusion-Exclusion Principle
Intuition
The problem asks for the number of integer solutions to a + b + c = n
with 0 ≤ a, b, c ≤ limit
. Without the upper bound, the answer is combinations with repetition: C(n+3-1, 3-1) = C(n+2, 2)
. The upper bound is handled using the inclusion-exclusion principle: subtract cases where one or more children get more than limit
candies.
Approach
- Count all non-negative integer solutions to
a + b + c = n
(no upper bound):
- Use the formula:
C(n+2, 2)
.
- Subtract cases where at least one child gets more than
limit
candies:
- For each child, if they get at least
limit+1
, seta' = a - (limit+1) ≥ 0
, so the equation becomesa' + b + c = n - (limit+1)
. - There are 3 such cases (one for each child):
3 * C(n - (limit+1) + 2, 2)
.
- Add back cases where at least two children get more than
limit
candies (overlap):
- For two children, both get at least
limit+1
, soa' + b' + c = n - 2*(limit+1)
. - There are 3 such cases:
3 * C(n - 2 * (limit+1) + 2, 2)
.
- Subtract cases where all three children get more than
limit
candies:
- All get at least
limit+1
, soa' + b' + c' = n - 3*(limit+1)
. - Only 1 such case:
C(n - 3*(limit+1) + 2, 2)
.
- For each combination, if the value inside
C(x, 2)
is negative, treat as 0. - Return the final answer.
Code
|
|
|
|
|
|
Complexity
- ⏰ Time complexity:
O(1)
(constant time, only arithmetic operations) - 🧺 Space complexity:
O(1)
(no extra space used)