Given integers L, S1 and S2 where L is the length of a circular track in meters, S1 and S2 are the speeds of two persons in kilometers/hour moving in the same direction on the given track starting from the same starting point. The task is to find the following:
- The time after which they will meet for the first time.
- The time at which there are going to meet at the starting point.
Examples:
Input: L = 30, S1 = 5, S2 = 2
Output: Met first time after 10 hrs
Met at starting point after 30 hrs
Input: L = 10, S1 = 1, S2 = 2
Output: Met first time after 10 hrs
Met at starting point after 10 hrs
Approach:
- For calculating the time at which they will first meet.
- First of all, calculate the Relative speed i.e. S1 – S2.
- Then use the formula, Time = Distance / Relative speed.
- For calculating the time at which they will again meet at starting point.
- First of all, calculate the time i.e. T1 and T2 which represent the time taken by both to cover 1 round of circular track by using the formula Time = Length of track / Speed.
- Then calculate the LCM to know the time they will again meet at starting point.
Below is the implementation of the above approach:
// C++ implementation of above approach #include <bits/stdc++.h> using namespace std;
// Function to return the time when both the // persons will meet at the starting point int startingPoint( int Length, int Speed1, int Speed2)
{ int result1 = 0, result2 = 0;
// Time to cover 1 round by both
int time1 = Length / Speed1;
int time2 = Length / Speed2;
result1 = __gcd(time1, time2);
// Finding LCM to get the meeting point
result2 = time1 * time2 / (result1);
return result2;
} // Function to return the time when both // the persons will meet for the first time float firstTime( int Length, int Speed1, int Speed2)
{ float result = 0;
int relativeSpeed = abs (Speed1 - Speed2);
result = (( float )Length / relativeSpeed);
return result;
} // Driver Code int main()
{ int L = 30, S1 = 5, S2 = 2;
// Calling function
float first_Time = firstTime(L, S1, S2);
int starting_Point = startingPoint(L, S1, S2);
cout << "Met first time after "
<< first_Time << " hrs" << endl;
cout << "Met at starting point after "
<< starting_Point << " hrs" << endl;
return 0;
} |
// Java implementation of above approach public class GFG {
// Function to return the time when both the // persons will meet at the starting point static int startingPoint( int Length, int Speed1, int Speed2) {
int result1 = 0 , result2 = 0 ;
// Time to cover 1 round by both
int time1 = Length / Speed1;
int time2 = Length / Speed2;
result1 = __gcd(time1, time2);
// Finding LCM to get the meeting point
result2 = time1 * time2 / (result1);
return result2;
}
static int __gcd( int a, int b) {
if (b == 0 ) {
return a;
}
return __gcd(b, a % b);
}
// Function to return the time when both // the persons will meet for the first time static float firstTime( int Length, int Speed1, int Speed2) {
float result = 0 ;
int relativeSpeed = Math.abs(Speed1 - Speed2);
result = (( float ) Length / relativeSpeed);
return result;
}
// Driver Code public static void main(String[] args) {
int L = 30 , S1 = 5 , S2 = 2 ;
// Calling function
float first_Time = firstTime(L, S1, S2);
int starting_Point = startingPoint(L, S1, S2);
System.out.println( "Met first time after "
+ first_Time + " hrs" );
System.out.println( "Met at starting point after "
+ starting_Point + " hrs" );
}
} |
# Python 3 implementation of # above approach # import gcd() from math lib from math import gcd
# Function to return the time when both the # persons will meet at the starting point def startingPoint(Length, Speed1, Speed2) :
result1 = 0
result2 = 0
# Time to cover 1 round by both
time1 = Length / / Speed1
time2 = Length / / Speed2
result1 = gcd(time1, time2)
# Finding LCM to get the meeting point
result2 = time1 * time2 / / (result1)
return result2
# Function to return the time when both # the persons will meet for the first time def firstTime(Length, Speed1, Speed2) :
result = 0
relativeSpeed = abs (Speed1 - Speed2)
result = Length / relativeSpeed
return result
# Driver Code if __name__ = = "__main__" :
L = 30
S1 = 5
S2 = 2
# Calling function
first_Time = firstTime(L, S1, S2)
starting_Point = startingPoint(L, S1, S2)
print ( "Met first time after" , first_Time, "hrs" )
print ( "Met at starting point after" ,
starting_Point, "hrs" )
# This code is contributed by Ryuga |
// C# implementation of above approach using System;
public class GFG {
// Function to return the time when both the // persons will meet at the starting point static int startingPoint( int Length, int Speed1, int Speed2) {
int result1 = 0, result2 = 0;
// Time to cover 1 round by both
int time1 = Length / Speed1;
int time2 = Length / Speed2;
result1 = __gcd(time1, time2);
// Finding LCM to get the meeting point
result2 = time1 * time2 / (result1);
return result2;
}
static int __gcd( int a, int b) {
if (b == 0) {
return a;
}
return __gcd(b, a % b);
}
// Function to return the time when both // the persons will meet for the first time static float firstTime( int Length, int Speed1, int Speed2) {
float result = 0;
int relativeSpeed = Math.Abs(Speed1 - Speed2);
result = (( float ) Length / relativeSpeed);
return result;
}
// Driver Code public static void Main() {
int L = 30, S1 = 5, S2 = 2;
// Calling function
float first_Time = firstTime(L, S1, S2);
int starting_Point = startingPoint(L, S1, S2);
Console.WriteLine( "Met first time after "
+ first_Time + " hrs" );
Console.WriteLine( "Met at starting point after "
+ starting_Point + " hrs" );
}
} /*This code is contributed by 29AjayKumar*/ |
<?php // PHP implementation of above approach function gcd ( $a , $b )
{ return $b ? gcd( $b , $a % $b ) : $a ;
} // Function to return the time // when both the persons will // meet at the starting point function startingPoint( $Length , $Speed1 ,
$Speed2 )
{ $result1 = 0;
$result2 = 0;
// Time to cover 1 round by both
$time1 = $Length / $Speed1 ;
$time2 = $Length / $Speed2 ;
$result1 = gcd( $time1 , $time2 );
// Finding LCM to get the
// meeting point
$result2 = $time1 * $time2 / ( $result1 );
return $result2 ;
} // Function to return the time when both // the persons will meet for the first time function firstTime( $Length , $Speed1 , $Speed2 )
{ $result = 0;
$relativeSpeed = abs ( $Speed1 - $Speed2 );
$result = ((float) $Length /
$relativeSpeed );
return $result ;
} // Driver Code $L = 30;
$S1 = 5;
$S2 = 2;
// Calling function $first_Time = firstTime( $L , $S1 , $S2 );
$starting_Point = startingPoint( $L , $S1 , $S2 );
echo "Met first time after " .
$first_Time . " hrs" . "\n" ;
echo "Met at starting point after " .
$starting_Point . " hrs" . "\n" ;
// This code is contributed // by ChitraNayal ?> |
<script> // javascript implementation of above approach // Function to return the time when both the
// persons will meet at the starting point
function startingPoint(Length , Speed1 , Speed2)
{
var result1 = 0, result2 = 0;
// Time to cover 1 round by both
var time1 = Length / Speed1;
var time2 = Length / Speed2;
result1 = __gcd(time1, time2);
// Finding LCM to get the meeting point
result2 = time1 * time2 / (result1);
return result2;
}
function __gcd(a , b)
{
if (b == 0)
{
return a;
}
return __gcd(b, a % b);
}
// Function to return the time when both
// the persons will meet for the first time
function firstTime(Length , Speed1 , Speed2)
{
var result = 0;
var relativeSpeed = Math.abs(Speed1 - Speed2);
result = ( Length / relativeSpeed);
return result;
}
// Driver Code
var L = 30, S1 = 5, S2 = 2;
// Calling function
var first_Time = firstTime(L, S1, S2);
var starting_Point = startingPoint(L, S1, S2);
document.write( "Met first time after " + first_Time + " hrs<br/>" );
document.write( "Met at starting point after " + starting_Point + " hrs" );
// This code is contributed by todaysgaurav </script> |
Met first time after 10 hrs Met at starting point after 30 hrs
Time Complexity: O(log(max(t1,t2)), where t1, t2 are time corresponding to given distance and speeds.
Auxiliary Space: O(1), since no extra space has been taken.