两个人从两个不同的点p1和p2开始比赛。它们跳跃覆盖了s1和s2米。找出他们是否会在相同次数的跳跃后相遇。
例子:
Input : p1 = 6, s1 = 3,
p2 = 8, s2 = 2
Output : Yes
Explanation: 6->9->12
8->10->12
They meet after two jumps.
Input : p1 = 4, s1 = 4,
p2 = 8, s2 = 2
Output : Yes
Explanation: 4->8->12
8->10->12
Input : p1 = 0, s1 = 2,
p2 = 5, s2 = 3
Output : No
Input : p1 = 42, s1 = 3,
p2 = 94, s2 = 2
Output : Yes
一个简单的解决方案是使它们一个接一个地跳跃。每次跳跃后,查看它们是否在同一点。
一个有效的解决方案基于以下事实:
由于起点总是不同的,因此如果满足以下条件,它们将满足。
(1)速度不一样
(2)速度之间的差异除以初始点之间的总距离。
C++
// C++ program to find any one of them
// can overtake the other
#include
using namespace std;
// function to find if any one of them can
// overtake the other
bool sackRace(int p1, int s1, int p2, int s2){
// Since starting points are always
// different, they will meet if following
// conditions are met.
// (1) Speeds are not same
// (2) Difference between speeds divide the
// total distance between initial points.
return ( (s1 > s2 && (p2 - p1) % (s1 - s2) == 0) ||
(s2 > s1 && (p1 - p2) % (s2 - s1) == 0));
}
// driver program
int main()
{
int p1 = 4, s1 = 4, p2 = 8, s2 = 2;
sackRace(p1, s1, p2, s2)? cout << "Yes\n" :
cout << "No\n";
return 0;
}
Java
// java program to find any one of them
// can overtake the other
import java.util.Arrays;
public class GFG {
// function to find if any one of
// them can overtake the other
static boolean sackRace(int p1, int s1,
int p2, int s2)
{
// Since starting points are
// always different, they will
// meet if following conditions
// are met.
// (1) Speeds are not same
// (2) Difference between speeds
// divide the total distance
// between initial points.
return ( (s1 > s2 && (p2 - p1) %
(s1 - s2) == 0) ||
(s2 > s1 && (p1 - p2)
% (s2 - s1) == 0));
}
public static void main(String args[])
{
int p1 = 4, s1 = 4, p2 = 8, s2 = 2;
if(sackRace(p1, s1, p2, s2))
System.out.println("Yes" );
else
System.out.println("No");
}
}
// This code is contributed by Sam007.
Python3
# python program to find any one of them
# can overtake the other
# function to find if any one of them can
# overtake the other
def sackRace(p1, s1, p2, s2):
# Since starting points are always
# different, they will meet if following
# conditions are met.
# (1) Speeds are not same
# (2) Difference between speeds divide the
# total distance between initial points.
return ( (s1 > s2 and (p2 - p1) % (s1 - s2) == 0)
or (s2 > s1 and (p1 - p2) % (s2 - s1) == 0))
# driver program
p1 = 4
s1 = 4
p2 = 8
s2 = 2
if(sackRace(p1, s1, p2, s2)):
print("Yes")
else:
print("No")
# This code is contributed by Sam007
C#
// C# program to find any one of them
// can overtake the other
using System;
class GFG {
// function to find if any one of
// them can overtake the other
static bool sackRace(int p1, int s1,
int p2, int s2)
{
// Since starting points are
// always different, they will
// meet if following conditions
// are met.
// (1) Speeds are not same
// (2) Difference between speeds
// divide the total distance
// between initial points.
return ( (s1 > s2 && (p2 - p1) %
(s1 - s2) == 0) ||
(s2 > s1 && (p1 - p2)
% (s2 - s1) == 0));
}
// Driver code
public static void Main()
{
int p1 = 4, s1 = 4, p2 = 8,
s2 = 2;
if(sackRace(p1, s1, p2, s2))
Console.WriteLine("Yes" );
else
Console.WriteLine("No");
}
}
// This code is contributed by Sam007.
PHP
$s2 && ($p2 - $p1) % ($s1 - $s2) == 0) ||
($s2 > $s1 && ($p1 - $p2) % ($s2 - $s1) == 0));
}
// Driver Code
$p1 = 4;
$s1 = 4;
$p2 = 8;
$s2 = 2;
if(sackRace($p1, $s1, $p2, $s2))
echo "Yes\n" ;
else
echo "No\n";
// This code is contributed by Sam007
?>
输出 :
Yes