Site Message

Only Premium Users can view the Question

Site Message

Only Premium Users can view the Question

Site Message

Only Premium Users can view the Question

Site Message

Only Premium Users can view the Question

Site Message

Only Premium Users can view the Question

Site Message

Only Premium Users can view the Question

Question: Uber OA | IIT Madras | SWE Internship | 2023
0
Entering edit mode

ADD COMMENTlink 2.8 years ago Delta 3.0k
0
Entering edit mode

Problem 1: Binary Cafeteria

Solution: Mathematical Approach

This is a combinatorial counting problem with a unique property that simplifies it significantly. The key insight is that since all dessert costs are distinct powers of two, any total amount of money corresponds to a unique subset of desserts due to the uniqueness of binary representation. This transforms the problem from a complex subset sum variant into a straightforward counting exercise.

The logic is as follows:

  • Unique Representation: Because costs are {20,21,dots,2k−1}, any total cost C can be formed in at most one way. For example, a cost of 5 (101_2) can only be achieved by buying desserts costing 20 and 22.

  • Counting Affordable Costs: The problem reduces to counting how many distinct total costs are possible within the budget n. The available desserts can form any integer sum from 0 (buying nothing) up to 2k−1 (buying all desserts).

  • Finding the Limit: The number of affordable options is limited by two factors: the total number of possible subsets (2k) and the budget (n+1 possible costs, from 0 to n). The answer is the smaller of these two values.

  • Handling Large Numbers: Since n and k can be very large, 2k can easily overflow standard integer types. However, since n is at most 109, if k is 30 or greater, 2k will always exceed n + 1. This observation allows us to avoid calculating large powers of two.

 

#include <iostream>
#include <algorithm>

using namespace std;

long long solveBinaryCafeteria(long long n, long long k) {
    if (k >= 60) return n + 1;
    long long totalCosts = 1LL << k;
    return min(n + 1, totalCosts);
}

Complexity Analysis:

  • Time Complexity: O(1). The solution involves a single comparison and a bitwise shift, which are constant-time operations.

  • Space Complexity: O(1). No additional space proportional to the input size is required.

ADD COMMENTlink 9 months ago ANIRUDH • 0

Login before adding your answer.

Similar Posts
Loading Similar Posts