TopcoderARCHIVE
Archive/Problems/DistancesBetweenNumbers
SRM · Problem 17013

DistancesBetweenNumbers

Problem statement, definition, constraints, and public examples.

Problem Statement

Given two non-negative integers X and Y, their distance is defined as the number of base-10 digits in which they differ.

For example:

  • distance(47, 47) = 0
  • distance(42, 47) = distance(47, 42) = 1: these numbers have the same tens digit and different ones digits
  • distance(24, 42) = 2: we are comparing each position separately, not just the sets of digits
  • distance(1234, 37) = 3: if one number is shorter, the missing digits are zero, so distance(1234, 37) = distance(1234, 0037)

You are given a long sequence A that consists of N non-negative integers.

For each pair of indices i and j (0 <= i < j < N), Lucy calculated the distance between A[i] and A[j]. Then, Lucy computed the sum of all those distances.

Return the final value obtained by Lucy.


In order to keep the input size small, you are only given a prefix of A, the rest is generated pseudorandomly. Please use the pseudocode or code given below to generate A.


Pseudocode:

A = an empty array of length N
L = length(Aprefix)

for i = 0 to L-1:
    A[i] = Aprefix[i]

for i = L to N-1:
    A[i] = (A[i-1] * 1103515245 + 12345) modulo 2^31

-------------------------------------------------------------------------------------

Java:

int[] A = new int[N];
int L = Aprefix.length;
for (int i=0; i<L; ++i) A[i] = Aprefix[i];
for (int i=L; i<N; ++i) A[i] = (int)((A[i-1] * 1103515245L + 12345L) % (1L << 31));

-------------------------------------------------------------------------------------

C++:

vector<int> A(N);
int L = Aprefix.size();
for (int i=0; i<L; ++i) A[i] = Aprefix[i];
for (int i=L; i<N; ++i) A[i] = (A[i-1] * 1103515245LL + 12345LL) % (1LL << 31);

Definition

Class:
DistancesBetweenNumbers
Method:
count
Parameters:
int, int[]
Returns:
long
Method signature:
long count(int N, int[] Aprefix)
(be sure your method is public)

Notes

  • The reference solution does not depend on A being pseudorandom. It would correctly solve any input of the given size.

Constraints

  • N will be between 2 and 100,000, inclusive.
  • Aprefix will contain between 1 and min(100, N) elements, inclusive.
  • Each element of Aprefix will be between 0 and 2^31 - 1, inclusive.

Examples

  1. 4
    {47, 47, 47, 47}
    Returns: 0
    All numbers are the same, all pairwise distances are zero.
  2. 4
    {47, 47, 42, 47}
    Returns: 3
    Three pairs have distance 0, three pairs have distance 1.
  3. 4
    {1, 10, 100, 1000}
    Returns: 12
    Each pair of elements of this sequence has distance 2.
  4. 10
    {1234567, 1234890}
    Returns: 389
    The full array A looks as follows: A = { 1234567, 1234890, 1979817275, 1396317272, 1752240561, 191800982, 48419351, 727754244, 1439963117, 1491506722 }. If you are writing your own code to generate A, please watch out for integer overflows.
← All problems