-->

10/8/20

Replace for X codechef October long challenge solution | codechef October long challenge editorial

 Replace for X  codechef October long challenge solution -

This Problem is taken from CodeChef October long challenge.

Problem Statement-

You are given an array of N integers A1,A2,,AN and three more integers X,p, and k.

An operation on the array is defined to be: replace the k-th smallest integer in the array with any integer you want.

Output the minimum number of operations you must perform on the array (possibly 0 operations) to make the p-th smallest element of the array equal to X. If it is impossible to do so output 1.

Note: the k-th smallest number in an array is the k-th number from the left when the array is sorted in non-decreasing order.

Input

  • The first line of the input contains a single integer T denoting the number of test cases. The description of T test cases follows.
  • The first line of each test case contains four integers N,X,p,k respectively.
  • The second line contains N space-separated integers A1,A2,,AN.

Output

For each test case, print a single line containing one integer ― the minimum number of operations you must perform to make X the p-th smallest element or 1 if its impossible to do so.

Constraints

  • 1T100
  • 1p,kN
  • 0X109
  • The sum of N over all test cases does not exceed 4105
  • 0Ai109 for each valid i

Subtasks

Subtask #1 (10 points): N5

Subtask #2 (40 points): The sum of N over all test cases does not exceed 3103

Subtask #3 (50 points): Original constraints

Example Input

2
5 4 3 4
4 9 7 0 8
2 25 1 2
100 20

Example Output

1
-1

Explanation

Example case 1:

  • We can perform one operation in the array. Take the k-th smallest integer of the current array (which is 8 in this case) and replace it with 0. The array then becomes [4,9,7,0,0] which now makes 4 as the 3rd smallest number of the array.

Example case 2:

  • It is impossible to make 25 as the smallest number of the array.





Solution-

SOlution-
Since a note is mentioned in question that 
Note: the k-th smallest number in an array is the k-th number from the left when the array is sorted in non-decreasing order.
So first of all we will sort our array/vector in non-decreasing order so that we can find kth smalles number.

then  p=p-1;
      k=k-1;
because index is starting from 0 in my code so i did previous step.
I have written a solution function which return minumum number of operation reequired.
Now Let's jump into logic.
1-first of all i will check is(v[p]==X) if it is true i will simply return 0 because in this case i already have my answer.
2-now i will maintain a count variable which count total operation required.
3-Main logic start from here since out array is sorted till now so  we have three choices from here if(k>p),if(k<p) and if(k==p) and 
in every 3 case these 3 case also contain two-two cases if(v[p]<x) and if(v[p]>x).

4- if(k>p) and if(v[p]<x) in this case we never reach to final solution so i will return -1 in this case.
if (k>p) && v[p]> x in this case i can reach to my solution and i will try to add some smaller value at k so that i can shift 
value at p toward k ans every time i increase my value by one.
5- same if (k<p) this case is totally opposite of case 4.
6- if (k==p)
in this case i can reach to my solution 
if(v[p]>x) i have to shift pth value to left  
and if(v[p]<x) i will shift pth value  to right 
and count ans.
finllay i return ans which tells minimum way to get final solution.
  code of this problem 

Advertiser

all right reserved @technicalkeeda.in. Powered by Blogger.