TopcoderArchiveVisit Topcoder
SRM22 Dec 2013
SRM 607

PalindromicSubstringsDiv1

Problem statement, definition, constraints, and public examples.

Problem Statement

Marco likes strings. In particular, he likes strings that have a lot of palindromic substrings. For example, he really likes the string "aaa" because it has 6 palindromic substrings: "a" occurs three times, "aa" occurs twice, and "aaa" occurs once.


Right now, Marco has a string S composed of lowercase letters and question marks. You are to reconstruct S from the given String[]s S1 and S2 as follows:

  1. Concatenate all elements of S1 to make a string A.
  2. Concatenate all elements of S2 to make a string B.
  3. Finally, concatenate A and B to get S.

Marco is going to replace every question mark in S with a random lowercase letter ('a' - 'z'). Return the expected number of palindromic substrings in the resulting string.

Definition

Class:
PalindromicSubstringsDiv1
Method:
expectedPalindromes
Parameters:
String[], String[]
Returns:
double
Method signature:
double expectedPalindromes(String[] S1, String[] S2)
(be sure your method is public)

Notes

  • For each question mark, the letter used to replace it is chosen uniformly at random. That is, the probability of choosing any particular letter is 1/26. All random choices are mutually independent.
  • A palindromic string is a string that reads the same forwards and backwards.
  • Your return value must have an absolute or a relative error of less than 1e-9.

Constraints

  • S1 and S2 will contain no more than 50 elements.
  • Each element of S1 and S2 will contain no more than 50 characters.
  • S will contain at least 1 character.
  • S will contain only lowercase letters ('a' - 'z') and question marks ('?').

Examples

  1. {"a","a",""}
    {"a"}
    Returns: 6.0
    This is the example given in the statement.
  2. {"z??"}
    {}
    Returns: 3.115384615384615
    There are 26^2 = 676 equally likely possibilities for the letters used to replace the question marks. Here are all possible outcomes: The string "zzz" has 6 palindromic substrings. Each of the 25 strings "zaz", "zbz", ..., "zyz" has 4 palindromic substrings. Each of the 25 strings "zza", "zzb", ..., "zzy" has 4 palindromic substrings. Each of the 25 strings "zaa", "zbb", ..., "zyy" has 4 palindromic substrings. Each of the remaining 600 possible strings only has the 3 single-letter palindromic substrings. The expected number of palindromic substrings can be computed simply as the average over all 676 possible cases. Hence, the correct return value is (6 + 75*4 + 600*3) / 676.
  3. {"ab","c"}
    {"??","a?"}
    Returns: 7.315088757396449
  4. {}
    {"?"}
    Returns: 1.0
  5. {"ab?def","?"}
    {"f??a"}
    Returns: 12.545971779699588
Back to all problems