Statistics

Problem Statement for "KSubstring"

Problem Statement

You are given numbers A0, X, Y, M and n. Generate a list A of length n using the following recursive definition:
A[0] = A0
A[i] = (A[i - 1] * X + Y) MOD M (note that A[i - 1] * X + Y may overflow 32-bit integer)

Let s(i, k) be a sum of k consecutive elements of the list A starting with the element at position i (0 indexed). More formally, s(i, k) = A[i] + A[i + 1] + ... + A[i + k - 1].
Your task is to find the smallest difference between s(i, k) and s(j, k) (where difference is defined as abs(s(i, k) - s(j, k))) such that i + k <= j. In other words, you must find the smallest difference between two subsequences of the same length that do not overlap.
Call this smallest difference val, and return a int[] containing exactly two elements. The first element should be k, and the second element should be val. If there are multiple solutions with the same val, return the one among them with the highest k.

Definition

Class:
KSubstring
Method:
maxSubstring
Parameters:
int, int, int, int, int
Returns:
int[]
Method signature:
int[] maxSubstring(int A0, int X, int Y, int M, int n)
(be sure your method is public)

Constraints

  • M will be between 1 and 1,000,000,000, inclusive.
  • A0 will be between 0 and M-1, inclusive.
  • X will be between 0 and M-1, inclusive.
  • Y will be between 0 and M-1, inclusive.
  • n will be between 2 and 3,000, inclusive.

Examples

  1. 5

    3

    4

    25

    5

    Returns: {2, 1 }

    The elements of the list are {5, 19, 11, 12, 15}. There is no way to find two subsequences that have equal sums and do not overlap, so there is no way to obtain 0 as a difference. |s(0, 2) - s(2, 2)| = 1 and that is the minimal difference. Note that |s(2, 1) - s(3, 1)| is also 1, but we don't choose these subsequences because they have a lower value for k.

  2. 7

    37

    23

    4007

    23

    Returns: {4, 2 }

  3. 7

    37

    23

    4003

    500

    Returns: {231, 1 }

  4. 7

    37

    23

    4003

    700

    Returns: {268, 1 }

  5. 1

    32

    1

    65536

    1700

    Returns: {848, 0 }

  6. 53

    7

    11

    40003

    30

    Returns: {5, 5 }

  7. 2

    4001

    17

    1000003

    200

    Returns: {7, 1 }

  8. 0

    6

    12

    1000209

    2000

    Returns: {781, 9 }

  9. 0

    6

    13

    1000305

    3000

    Returns: {658, 2 }

  10. 0

    6

    13

    1000338

    3000

    Returns: {663, 1 }

  11. 0

    6

    13

    1000342

    2900

    Returns: {311, 1 }

  12. 0

    6

    13

    1000344

    3000

    Returns: {41, 12 }

  13. 1

    1

    1

    2

    3000

    Returns: {1500, 0 }

  14. 3

    4

    5

    978951371

    2756

    Returns: {36, 12 }

  15. 8

    19

    17

    2093

    12

    Returns: {5, 161 }

    The elements of the list are {8, 169, 1135, 652, 1940, 1296, 1618, 1457, 491, 974, 1779, 330}. The smallest difference is |s(1, 5) - s(7, 5)| = 161.

  16. 10

    18

    10

    3672

    12

    Returns: {5, 180 }

  17. 18

    2

    4698

    4999

    12

    Returns: {1, 75 }

  18. 10

    18

    6

    4884

    12

    Returns: {5, 132 }

  19. 10

    18

    7

    2714

    12

    Returns: {5, 118 }

  20. 53

    13

    9

    65535

    500

    Returns: {244, 0 }

  21. 12

    34

    55

    7890

    123

    Returns: {35, 4 }

  22. 0

    1

    12345678

    1000000000

    3000

    Returns: {9, 82 }

  23. 0

    1

    1234567

    999999999

    100

    Returns: {1, 1234567 }

  24. 961751977

    961752983

    961751491

    961905521

    3000

    Returns: {83, 1 }

  25. 999999999

    999999999

    999999999

    1000000000

    3000

    Returns: {1500, 0 }

  26. 982450801

    982450981

    982451161

    982451333

    3000

    Returns: {65, 2 }

  27. 941084101

    941093911

    941101729

    941482127

    2500

    Returns: {113, 1 }

  28. 941083987

    941083993

    941083987

    941084531

    1700

    Returns: {349, 89 }

  29. 941083987

    941083993

    941083987

    941084831

    170

    Returns: {71, 1604 }

  30. 941083987

    941083993

    941083991

    941084821

    1200

    Returns: {413, 107 }

  31. 941083987

    941083993

    941084777

    941088461

    1700

    Returns: {505, 71 }

  32. 2

    7

    941084303

    941089453

    2234

    Returns: {854, 62 }

  33. 7

    3

    11

    1000000000

    30

    Returns: {1, 25 }

  34. 2

    7

    941088167

    941093551

    2500

    Returns: {173, 6 }

  35. 11

    4003

    7

    4007

    1000

    Returns: {312, 1 }

  36. 2

    19

    37

    941084201

    2234

    Returns: {21, 4 }

  37. 2

    19

    941089207

    941092013

    2500

    Returns: {1054, 5 }

  38. 2

    19

    941089207

    941092013

    3000

    Returns: {9, 1 }

  39. 2

    7

    2

    9

    3000

    Returns: {1497, 0 }

  40. 2

    7

    2

    941084983

    3000

    Returns: {1174, 10 }

  41. 5

    55

    555

    5555

    555

    Returns: {255, 0 }

  42. 91

    37

    13

    1000007

    2222

    Returns: {930, 1 }

  43. 53

    13

    9

    65535

    3000

    Returns: {1464, 0 }

  44. 5

    3

    4

    25

    3000

    Returns: {1500, 0 }

  45. 12

    34

    55

    7890

    3000

    Returns: {1441, 0 }

  46. 1

    2

    3

    12334455

    3000

    Returns: {1145, 1 }

  47. 12

    34

    55

    29989

    3000

    Returns: {1231, 1 }

  48. 247830

    423144

    528351

    100000000

    3000

    Returns: {1100, 0 }

  49. 7523

    11111

    1234

    12345

    3000

    Returns: {1085, 0 }

  50. 5

    199

    817238

    999666111

    3000

    Returns: {143, 4 }

  51. 3000

    3000

    3000

    99999999

    3000

    Returns: {1300, 0 }

  52. 1

    1000

    0

    100000007

    3000

    Returns: {87, 1 }

  53. 12

    123

    44

    1000000000

    3000

    Returns: {390, 16 }

  54. 53

    13

    9

    1165535

    3000

    Returns: {1200, 0 }

  55. 1

    31

    17

    12345679

    3000

    Returns: {1093, 4 }

  56. 6456

    456456456

    546456456

    1000000000

    3000

    Returns: {1098, 512 }

  57. 0

    1

    1

    1000000000

    3000

    Returns: {1, 1 }

  58. 5

    3

    4

    25234234

    3000

    Returns: {944, 2 }

  59. 123456789

    777777779

    888888889

    987654321

    3000

    Returns: {583, 1 }

  60. 5

    3453

    345321

    6574432

    3000

    Returns: {448, 0 }

  61. 5

    1000

    1000

    1000000000

    3000

    Returns: {1498, 0 }

  62. 999999999

    1

    1

    1000000000

    3000

    Returns: {1, 1 }

  63. 8

    19

    17

    999999999

    3000

    Returns: {176, 1 }

  64. 12389823

    12340934

    58439581

    939829834

    3000

    Returns: {316, 2 }

  65. 878782

    1231154

    78914542

    92345677

    3000

    Returns: {219, 1 }

  66. 235

    327

    125

    100090123

    3000

    Returns: {395, 1 }

  67. 14365109

    2874294

    93092422

    999999997

    3000

    Returns: {266, 3 }

  68. 53

    13

    9

    65535

    2999

    Returns: {1463, 0 }

  69. 999997777

    1

    1

    1000000000

    3000

    Returns: {1, 1 }

  70. 999999999

    987654321

    987654327

    1000000000

    3000

    Returns: {584, 8 }

  71. 345345

    345

    45345534

    1000000000

    3000

    Returns: {1488, 0 }

  72. 12

    34

    55

    123456789

    3000

    Returns: {503, 1 }

  73. 5

    3

    4

    1000000000

    3000

    Returns: {662, 8 }

  74. 1

    2

    2

    1000000000

    3000

    Returns: {1, 3 }

  75. 0

    1

    1

    100000000

    3000

    Returns: {1, 1 }

  76. 12

    34

    55

    999999999

    3000

    Returns: {38, 1 }

  77. 9876543

    987654321

    987654321

    987654322

    2997

    Returns: {1498, 0 }

  78. 999999991

    872341235

    987654321

    999999999

    3000

    Returns: {473, 9 }

  79. 53

    2003

    123314

    1201231

    3000

    Returns: {1202, 0 }

  80. 0

    0

    0

    3

    3000

    Returns: {1500, 0 }

  81. 1000000

    1000000

    1000000

    10000000

    3000

    Returns: {1500, 0 }

  82. 999999999

    999799951

    999999999

    1000000000

    3000

    Returns: {197, 1 }

  83. 100

    789

    422

    1000000000

    3000

    Returns: {47, 18 }

  84. 5

    21

    31

    10000007

    3000

    Returns: {235, 0 }

  85. 1

    1

    1

    1000000000

    3000

    Returns: {1, 1 }

  86. 3

    4

    5

    99987

    3000

    Returns: {1280, 1 }

  87. 53

    31337

    1337

    65535

    3000

    Returns: {1496, 0 }

  88. 12

    34

    55

    1000000000

    3000

    Returns: {500, 0 }

  89. 752752727

    727737527

    134537377

    999999999

    3000

    Returns: {430, 9 }

  90. 21

    214435

    325326435

    1000000000

    3000

    Returns: {1488, 0 }

  91. 999999999

    1

    999999999

    1000000000

    3000

    Returns: {1, 1 }

  92. 12345678

    1234567

    12345

    1000000000

    3000

    Returns: {198, 8 }

  93. 1

    782

    99

    1000000000

    3000

    Returns: {1000, 0 }

  94. 78

    12972351

    2418255

    111626124

    3000

    Returns: {669, 3 }

  95. 999999999

    999999999

    999999999

    1000000000

    55

    Returns: {27, 0 }

  96. 2

    997137

    5

    999999983

    3000

    Returns: {1, 4 }

  97. 0

    0

    1

    1000000000

    3000

    Returns: {1499, 0 }

  98. 12345

    37523

    39727

    999999937

    3000

    Returns: {6, 9 }

  99. 1

    1

    1

    10

    3000

    Returns: {1500, 0 }

  100. 100

    7

    123

    100000

    3000

    Returns: {1460, 0 }

  101. 65465

    456546

    456456

    4564501

    3000

    Returns: {1428, 0 }

  102. 50000

    50000

    50000

    1000000000

    3000

    Returns: {1499, 0 }

  103. 999887763

    999887763

    999887763

    1000000000

    3000

    Returns: {657, 3 }

  104. 1

    2

    23213

    222222

    3000

    Returns: {1476, 0 }

  105. 3948867

    58976

    487847855

    909689084

    3000

    Returns: {311, 4 }

  106. 32133

    197999997

    213123213

    997999999

    3000

    Returns: {134, 1 }

  107. 13

    2354234

    1371

    1000000000

    3000

    Returns: {1250, 0 }

  108. 32767234

    99991232

    78231232

    999999999

    2999

    Returns: {899, 121 }

  109. 17

    2

    11

    1000000000

    3000

    Returns: {1, 28 }

  110. 453

    125

    5476

    134123

    3000

    Returns: {1012, 0 }

  111. 1

    31

    17

    999999997

    3000

    Returns: {174, 4 }

  112. 12341234

    12341237

    12341233

    999999991

    3000

    Returns: {116, 6 }

  113. 999999998

    9997

    999999998

    999999999

    3000

    Returns: {48, 3 }

  114. 9546

    3546

    134

    100000000

    2

    Returns: {1, 33840704 }

  115. 946455541

    1

    1

    1000000000

    3000

    Returns: {1, 1 }

  116. 999999999

    1000000

    1000000

    1000000000

    3000

    Returns: {1499, 0 }

  117. 145

    0

    0

    99999989

    389

    Returns: {194, 0 }

  118. 1234123

    9871366

    9163245

    29999997

    3000

    Returns: {595, 3 }

  119. 99999

    0

    0

    9999999

    3000

    Returns: {1499, 0 }

  120. 13

    62381318

    83219

    1000000000

    3000

    Returns: {1484, 0 }

  121. 37894325

    43214321

    54325432

    999999997

    3000

    Returns: {27, 7 }

  122. 10

    1

    0

    1000

    3000

    Returns: {1500, 0 }


This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2024, TopCoder, Inc. All rights reserved.
This problem was used for: