Given a binary string str representing the scores of a Volleyball match. The task is to find the winner of the match according to below conditions:
- In volleyball, the two teams play with each other and the team which scores 15 points first will be the winner except the case when both teams have reached to 14 points.
- In the case when both teams have reached 14 points then the team maintaining a lead of two points will be the winner.
In the given binary string, 0 means GEEK’s team lose a point and 1 means GEEK’s team win a point. The task is to find whether GEEK’s team had won or lost the match.
Examples:
Input: str = “01011111111110110101”
Output: GEEK’S won
Explanation: GEEK wins with score of 15-5Input: str = “010101010101010101010101010100”
Output: GEEK’s lost
Explanation: The opponent wins with score of 16-14
Naive Approach: The naive approach is mentioned in Set-1 of this problem.
Efficient Approach: No matter what is the timeline, the player scoring the last point will be winner. The following are the reasons for that:
The game ends with someone winning the set and meeting the required conditions to win the game.
- If the game ends by someone reaching the 15 points first then he will be one to win the last set.
- If the game is won by someone maintaining two points lead after reaching 15-14 state, then also the winner will be the one to win the last set maintaining a two point lead.
Below is the implementation of the above approach.
// C++ implementation of the above approach #include <bits/stdc++.h> using namespace std;
// Function to find the winner // from given timeline string findTheWinner(string str, int N)
{ // If last point scored is 1 then
// GEEK is winner
if (str[N - 1] == '1' ) {
return "GEEK's won" ;
}
// Else GEEK lost
return "GEEK's lost" ;
} // Driver Code int main()
{ // Input score timeline
string str1 = "01011111111110110101" ;
int N1 = str1.size();
string str2 = "010101010101010101010101010100" ;
int N2 = str2.size();
// Print the winner
cout << findTheWinner(str1, N1) << endl;
cout << findTheWinner(str2, N2) << endl;
return 0;
} |
// C# implementation of the above approach class GFG {
// Function to find the winner
// from given timeline
static String findTheWinner(String str, int N)
{
// If last point scored is 1 then
// GEEK is winner
if (str.charAt(N - 1 ) == '1' )
{
return "GEEK's won" ;
}
// Else GEEK lost
return "GEEK's lost" ;
}
// Driver Code
public static void main(String args[])
{
// Input score timeline
String str1 = "01011111111110110101" ;
int N1 = str1.length();
String str2 = "010101010101010101010101010100" ;
int N2 = str2.length();
// Print the winner
System.out.println(findTheWinner(str1, N1));
System.out.println(findTheWinner(str2, N2));
}
} // This code is contributed by Saurabh Jaiswal |
# Python code for the above approach # Function to find the winner # from given timeline def findTheWinner( str , N):
# If last point scored is 1 then
# GEEK is winner
if ( str [N - 1 ] = = '1' ):
return "GEEK's won"
# Else GEEK lost
return "GEEK's lost"
# Driver Code # Input score timeline str1 = "01011111111110110101"
N1 = len (str1)
str2 = "010101010101010101010101010100"
N2 = len (str2)
# Print the winner print (findTheWinner(str1, N1))
print (findTheWinner(str2, N2))
# This code is contributed by Saurabh Jaiswal |
// C# implementation of the above approach using System;
class GFG{
// Function to find the winner // from given timeline static string findTheWinner( string str, int N)
{ // If last point scored is 1 then
// GEEK is winner
if (str[N - 1] == '1' )
{
return "GEEK's won" ;
}
// Else GEEK lost
return "GEEK's lost" ;
} // Driver Code public static void Main()
{ // Input score timeline
string str1 = "01011111111110110101" ;
int N1 = str1.Length;
string str2 = "010101010101010101010101010100" ;
int N2 = str2.Length;
// Print the winner
Console.WriteLine(findTheWinner(str1, N1));
Console.WriteLine(findTheWinner(str2, N2));
} } // This code is contributed by ukasp |
<script> // JavaScript code for the above approach
// Function to find the winner
// from given timeline
function findTheWinner(str, N)
{
// If last point scored is 1 then
// GEEK is winner
if (str[N - 1] == '1' ) {
return "GEEK's won" ;
}
// Else GEEK lost
return "GEEK's lost" ;
}
// Driver Code
// Input score timeline
let str1 = "01011111111110110101" ;
let N1 = str1.length;
let str2 = "010101010101010101010101010100" ;
let N2 = str2.length;
// Print the winner
document.write(findTheWinner(str1, N1) + '<br>' );
document.write(findTheWinner(str2, N2) + '<br>' );
// This code is contributed by Potta Lokesh </script>
|
GEEK's won GEEK's lost
Time Complexity: O(1)
Auxiliary Space: O(1)