Блог пользователя saketag007

Автор saketag007, история, 6 лет назад, По-английски

Given two arrays A and B of size n and m respectively. We can choose an element from A and one from B such that C=Ai + Bj . We have to compute all possible ways to from a sum C and also all unique sums.

Constraints:-

0<A,B<=10^5 // Size of array A and B

0<=Ai,Bi<=10^6

Sample I/P:-

2 3 //Size of array A and B

5 6 // Elements of array A

2 2 3 //Elements of array B

Sample O/P:-

7 2

8 3

9 1

Explanation:- 7 can be formed in two ways by A1+B1 , A1+B2 (using 1-based indexing)

8 can be formed in 3 ways by A1+B2 , A2+B1 , A2+B2

9 can be formed in 1 way by A2+B3

Please help me with a solution less than (n*m).

Have a look on my code:- Link here

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
6 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Is there any other constrain on the problem? In worst case there could be n * m distinct sums and the time complexity just to output them would be O(n * m).

»
6 лет назад, # |
Rev. 2   Проголосовать: нравится +9 Проголосовать: не нравится

This problem is the most basic application of FFT. Consider two polynomails p1(x) = x^a1 + x^a2 + .. + x^an and p2(x) = x^b1 + x^b2 + ... + x^bm. Multiplying these polynomials would give your answer. Multiplication can be done using fft. Say after multiplication, you get p3(x) = c0 + c1*x + c2*x^2 + ... + ck*x^k. Coefficient of x^k will give you the number of ways to get k as a sum.

  • »
    »
    6 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    This would have been correct if values in the arrays A and B were small, but unfortunately Ai, Bi ≤ 109.

»
6 лет назад, # |
Rev. 2   Проголосовать: нравится +20 Проголосовать: не нравится

Is this from Codechef's certification exam? In that case the constraint was

0<=Ai,Bi<=10^6

My solution was the same as mentioned by aviroop123 and it gave 100 points.

»
6 лет назад, # |
  Проголосовать: нравится +21 Проголосовать: не нравится

That's impossible. Consider following example:

Ai = i, Bi = M * i, where M = 104. You have to write at least 2 * 109 numbers. Obviously that's impossible within 4s.