Encuentre el ganador de un juego donde los puntajes se dan como una string binaria | conjunto 2

Dada una string binaria str que representa los puntajes de un partido de Voleibol. La tarea es encontrar al ganador del partido de acuerdo con las siguientes condiciones:

  • En voleibol, los dos equipos juegan entre sí y el equipo que anote primero 15 puntos será el ganador, excepto en el caso en que ambos equipos hayan llegado a 14 puntos.
  • En el caso de que ambos equipos hayan alcanzado los 14 puntos, el equipo que mantenga una ventaja de dos puntos será el ganador.

En la string binaria dada, 0 significa que el equipo de GEEK pierde un punto y 1 significa que el equipo de GEEK gana un punto. La tarea es encontrar si el equipo de GEEK ganó o perdió el partido.

Ejemplos:

Entrada: str = “010111111111110110101”
Salida: GEEK’S ganó
Explicación: GEEK gana con una puntuación de 15-5

Entrada: str = “010101010101010101010101010100”
Salida: GEEK’s lost
Explicación: El oponente gana con una puntuación de 16-14

 

Enfoque ingenuo:   El enfoque ingenuo se menciona en el Conjunto-1 de este problema.

Enfoque eficiente:  no importa cuál sea la línea de tiempo, el jugador que anote el último punto será el ganador. Las siguientes son las razones para ello:

El juego termina cuando alguien gana el set y cumple las condiciones requeridas para ganar el juego. 

  • Si el juego termina cuando alguien llega primero a los 15 puntos, será uno de los que gane el último set.
  • Si el juego lo gana alguien que mantiene una ventaja de dos puntos después de alcanzar el estado 15-14, entonces el ganador también será el que gane el último set manteniendo una ventaja de dos puntos.

A continuación se muestra la implementación del enfoque anterior.

C++

// 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;
}

Java

// 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

Python3

# 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#

// 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

Javascript

<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>
Producción

GEEK's won
GEEK's lost

Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1) 

Publicación traducida automáticamente

Artículo escrito por Shivam.Pradhan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *