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

ZCO13003 - Editorial

$
0
0

PROBLEM SETTER -
ZCO 2013

DIFFICULTY
Easy

PREREQUISITES
Sorting, 2-pointer

PROBLEM IN SHORT
Given an array A of N integers and an integer K, find the number of pairs of indices (i,j) and (i $\neq$ j), such that A[i] + A[j] is less than K.

FIRST SUBTASK SOLUTION
It can be solved with a simple brute by trying all the C(N,2) pairs with a nested for loop by iterating over all pairs and adding 1 to the answer if sum of selected elements is less than K. Here is the implement for it –

for(int i = 1;i < n+1;i++)
    for(int j = i+1;j < n+1;j++)
        if(A[i] + A[j] < K)
            ans++;
cout << ans;

TIME COMPLEXITY -
$O(N^2)$

KEY OBSERVATIONS -
1.Sorting the array would not change the answer, hence we sort it in ascending order.
2.Suppose, for an element A[i], we have an element A[j], such that A[i] + A[j] < K and A[i] + A[j+1] >= K. Then, any integer with index less than j can pair with ith element to form a countable pair.

SECOND SUBTASK SOLUTION
We will first sort the array in ascending order. Then, we will maintain 2 pointers – i and j, where i represents the current index we are present on and counting the number of pairs for. j represents the first integer such that A[i] + A[j] < K and A[i] + A[j+1] >= K. Then j also represents the number of integers such that $i^{th}$ element can be paired with, according to observation 2.

So, for each i, we add (j-i) to the answer. Note that we don’t add simply j to the answer so as to avoid over-counting, as the number of pairs consisting of previous (i-1) integers as one of the number has already been counted. Then, we add 1 to i, and decrease j while A[i] + A[j] >= K and j > i. We keep doing this while j > i and i < N+1.

sort(a+1,a+n+1);
long long int ans=0,j=n;
for(int i = 1;i < n+1;i++)
{
    while(a[i] + a[j] >= k && j>0)
        j--;
    if(j > i)
        ans += (j-i);
    else
        break;
}
cout << ans;

Remember to store the answer in long long format as, N can be at most $10^5$ and C(N,2), which can be the maximum answer won't fit in type int.

TIME COMPLEXITY
$O(2*N + N*log(N))$


Viewing all articles
Browse latest Browse all 39796

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>