Minimum time to reach a point with +t and -t moves at time t

Given a positive coordinate ‘X’ and you are at coordinate ‘0’, the task is to find the minimum time required to get to coordinate ‘X’ with the following move :
At time ‘t’, you can either stay at the same position or take a jump of length exactly ‘t’ either to the left or to the right. In other words, you can be at coordinate ‘x – t’, ‘x’ or ‘x + t’ at time ‘t’ where ‘x’ is the current position.

Examples:

Input: 6
Output: 3
At time 1, jump from x = 0 to x = 1 (x = x + 1)
At time 2, jump from x = 1 to x = 3 (x = x + 2)
At time 3, jump from x = 3 to x = 6 (x = x + 3)
So, minimum required time is 3.

Input: 9
Output: 4
At time 1, do not jump i.e x = 0 
At time 2, jump from x = 0 to x = 2 (x = x + 2)
At time 3, jump from x = 2 to x = 5 (x = x + 3)
At time 4, jump from x = 5 to x = 9 (x = x + 4)
So, minimum required time is 4.

Approach: The following greedy strategy works:
We just find the minimum ‘t’ such that 1 + 2 + 3 + ... + t >= X.



  • If (t * (t + 1)) / 2 = X then answer is ‘t’.
  • Else if (t * (t + 1)) / 2 > X, then we find (t * (t + 1)) / 2 – X and remove this number from the sequence [1, 2, 3, ..., t]. The resulting sequence sums up to ‘X’.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the above approach
  
#include <iostream>
  
using namespace std;
  
   // returns the minimum time
    // required to reach 'X'
    long cal_minimum_time(long X)
    {
  
        // Stores the minimum time
        long t = 0;
        long sum = 0;
  
        while (sum < X) {
  
            // increment 't' by 1
            t++;
  
            // update the sum
            sum = sum + t;
        }
  
        return t;
    }
  
// Driver code
int main()
{
        long n = 6;
        long ans = cal_minimum_time(n);
        cout << "The minimum time required is : " << ans ;
  
   return 0;
     
   // This code is contributed by ANKITRAI1
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the above approach
class GFG {
  
    // returns the minimum time
    // required to reach 'X'
    static long cal_minimum_time(long X)
    {
  
        // Stores the minimum time
        long t = 0;
        long sum = 0;
  
        while (sum < X) {
  
            // increment 't' by 1
            t++;
  
            // update the sum
            sum = sum + t;
        }
  
        return t;
    }
  
    // Driver code
    public static void main(String[] args)
    {
        long n = 6;
        long ans = cal_minimum_time(n);
        System.out.println("The minimum time required is : " + ans);
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 implementation of the 
# above approach
  
# returns the minimum time
# required to reach 'X'
def cal_minimum_time(X):
  
    # Stores the minimum time
    t = 0
    sum = 0
  
    while (sum < X):
          
        # increment 't' by 1
        t = t + 1
          
        # update the sum
        sum = sum + t;
      
    return t;
  
# Driver code
if __name__ == '__main__':
    n = 6
    ans = cal_minimum_time(n)
    print("The minimum time required is :", ans) 
      
# This code is contributed By
# Surendra_Gangwar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C#  implementation of the above approach
using System;
  
public class GFG{
      
    // returns the minimum time 
    // required to reach 'X' 
    static long cal_minimum_time(long X) 
    
  
        // Stores the minimum time 
        long t = 0; 
        long sum = 0; 
  
        while (sum < X) { 
  
            // increment 't' by 1 
            t++; 
  
            // update the sum 
            sum = sum + t; 
        
  
        return t; 
    
  
    // Driver code
    static public void Main (){
        long n = 6; 
        long ans = cal_minimum_time(n); 
        Console.WriteLine("The minimum time required is : " + ans); 
    

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php 
// PHP implementation of the 
// above approach
  
// returns the minimum time
// required to reach 'X'
function cal_minimum_time($X)
{
    // Stores the minimum time
    $t = 0;
    $sum = 0;
  
    while ($sum < $X
    {
  
        // increment 't' by 1
        $t++;
  
        // update the sum
        $sum = $sum + $t;
    }
  
    return $t;
}
  
// Driver code
$n = 6;
$ans = cal_minimum_time($n);
echo "The minimum time required is : " . $ans;
  
// This code is contributed
// by ChitraNayal
?>

chevron_right


Output:

The minimum time required is : 3


My Personal Notes arrow_drop_up

Recommended Posts: