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++
// 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 pointint 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 timefloat firstTime(int Length, int Speed1, int Speed2){ float result = 0; int relativeSpeed = abs(Speed1 - Speed2); result = ((float)Length / relativeSpeed); return result;}// Driver Codeint 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
// Java implementation of above approachpublic 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"); }} |
Python3
# Python 3 implementation of# above approach# import gcd() from math libfrom math import gcd# Function to return the time when both the# persons will meet at the starting pointdef 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 timedef firstTime(Length, Speed1, Speed2) : result = 0 relativeSpeed = abs(Speed1 - Speed2) result = Length / relativeSpeed return result# Driver Codeif __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#
// 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 // PHP implementation of above approachfunction gcd ($a, $b) { return $b ? gcd($b, $a % $b) : $a;}// Function to return the time // when both the persons will // meet at the starting pointfunction 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 timefunction 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?> |
Javascript
<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.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Info to that Topic: geeksforgeeks.org/time-taken-by-two-persons-to-meet-on-a-circular-track/ […]