TopcoderArchiveVisit Topcoder
Archive
Algorithm problem

DessertMaker

Problem statement, definition, constraints, and public examples.

Problem Statement

You have a number of tasty ingredients and you want to know how many different banana split desserts you could make using those ingredients. In order for something to count as a banana split, it must have at least one "banana", at least one "ice cream", and at least one other ingredient (i.e., at least one ingredient that is not a "banana" or an "ice cream"). Ingredients with the same name are not distinguishable, and it doesn't matter what order the items are added to the dessert. For example, suppose you had the following 5 ingredients:
  • "ice cream","banana","chocolate","chocolate","peanuts"
You could make a total of 5 different banana splits, as shown below:
  • "ice cream","banana","chocolate","chocolate","peanuts"
  • "ice cream","banana","chocolate","peanuts"
  • "ice cream","banana","chocolate","chocolate"
  • "ice cream","banana","chocolate"
  • "ice cream","banana","peanuts"
Note that if you would have had 2 bananas, you would have had 10 possibilities - as adding a banana to each combination above makes a new dessert. Return the number of distinct banana splits you could create using the items given in ingredients.

Definition

Class:
DessertMaker
Method:
countBananaSplits
Parameters:
String[]
Returns:
int
Method signature:
int countBananaSplits(String[] ingredients)
(be sure your method is public)

Constraints

  • ingredients will contain between 1 and 30 elements, inclusive.
  • Each element of ingredients will contain between 1 and 50 characters, inclusive.
  • Each element of ingredients will contain only lowercase letters and spaces ('a'-'z',' ').

Examples

  1. {"ice cream","banana","chocolate","chocolate","peanuts"}
    Returns: 5
    The example from the problem statement.
  2. {"banana", "banana", "chocolate", "strawberries", 
    "pineapple", "pineapple", "rice cream"}
    Returns: 0
    To make a banana split, you need "ice cream", "banana", and at least one other ingredient. We have a "banana" and plenty of other ingredients, but we don't have an "ice cream" so we have zero possibilities.
  3. {"ice cream", "ice cream", "banana", "banana", "chocolate",
     "chocolate"}
    Returns: 8
    To see the 8 possibilities, note that you can pick either one or two "ice cream"s, one or two "banana"s and one or two "chocolate"s (and 2*2*2=8). You cannot have no ice cream or no bananas - and we need to have at least one other ingredient so we need at least one chocolate. Note that {"ice cream","banana","chocolate"} counts as a different dessert than {"ice cream","ice cream","banana","banana","chocolate","chocolate"} because the ingredient list is not identical.
  4. {"foam", "apple", "whipped cream", "apple", "mushroom", 
    "apple core", "ice cream", "ice cream", "banana", "giraffe", 
    "mushroom", "spare tire", "ice cream", "banana", "foam", 
    "wrench", "paper", "cherry", "alarm clock", "football" ,"apple", 
    "apple"}
    Returns: 138234
    You don't know if it'll be good until you try it.
Back to all problems