Quantcast
Channel: CodeChef Discuss - latest questions
Viewing all articles
Browse latest Browse all 39796

LEDGER - Editorial

$
0
0

PROBLEM LINK:

PracticeContest

Author:Yash SangaiTester:Sudhanshu GuptaEditorialist:Sudhanshu Gupta

DIFFICULTY:

MEDIUM

PREREQUISITES:

Pigeonhole principle, DP

PROBLEM:

In a given array of integers of size N, find the smallest sub-array whose sum is divisible by N.

EXPLANATION:

Claim:

There is always such a subset. Moreover, there is always a consecutive subsegment of any sequence of numbers that corresponds to the multiset's elements with the sum divisible by the multiset's size.

Proof:

Let's denote a1 + a2 + ... + ak by bk. So, we obtain:

b0 = 0
b1 = a1
b2 = a1 + a2
...
bN = a1 + a2 + ... + aN

It is easy to see that aL + aL+1 + ... + aR (L <= R) equals to bR - bL-1. Therefore, if there are two values with equal residues modulo N among b0, b1, ..., bN then we take the first one for L-1 and the second one for R and the required subsegment is found.

There are N+1 values of bi and N possible residues for N. So, according to the pigeonhole principle the required subsegment will always exist.

Some implementation details:

While calculating the value of bi you should use that bi equals to bi-1 + ai, that allows you to precompute all bs in O(N) time. Practically, only bi modulo N are important. Then you can just sort the numbers along with their indices in order to find the duplicates among the residues.

SOLUTIONS:

Solution can be found here.


Viewing all articles
Browse latest Browse all 39796

Trending Articles