Problema de organización del torneo

Dado un número entero positivo N que representa el recuento de jugadores que juegan el juego. El juego se juega entre dos equipos, de modo que cada equipo consta de al menos un jugador, pero el recuento total de jugadores en el juego debe ser N. El juego dura exactamente 30 minutos , la tarea es verificar si todos los jugadores jugarán entre sí o no. Si el juego se puede jugar hasta T horas y se permite jugar el juego más de 1 vez. Si se encuentra que es cierto, imprima «Posible» . De lo contrario, imprima «No es posible» .

Ejemplos:

Entrada: N = 3, T = 1 
Salida: Posible 
explicación: 
En la primera media hora, los jugadores { p 1 , p 2 } jugaron el partido contra { p 3 }. 
En 2d medias horas, los jugadores { p 2 , P 3 } jugaron contra { p 1
ya que todos los jugadores jugaron entre sí dentro de T(=1) horas. Por lo tanto, la salida requerida es «Posible».

Entrada: N = 4, T = 0,5 
Salida: No es posible 
Explicación: 
En la primera media hora, los jugadores { p 1 , p 2 } jugaron el partido contra { p 3 , p 4 }. 
Dado que el jugador p 1 no jugó el juego contra p 2 dentro de T(=0.5) horas. Por lo tanto, la salida requerida es «No posible».

Enfoque: El problema se puede resolver usando la técnica Greedy . Las siguientes son las observaciones:

  • En cada juego, si uno de los dos equipos tiene un solo jugador, el juego debe jugarse N – 1 veces.
  • En cada juego, si uno del equipo tiene N / 2 jugadores y el otro equipo tiene (N + 1) / 2 , entonces el juego debe jugarse (N + 1) / 2 veces.

Siga los pasos a continuación para resolver el problema:

  • Si el tiempo total para jugar el juego N-1 veces es menor o igual a T , imprima «Posible» .
  • Si el tiempo total para jugar el juego (N + 1) / 2 veces es menor o igual a T , entonces imprima «Posible» .
  • De lo contrario, imprima «No es posible» .

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

C++

// C++ Program for the above approach
#include <iostream>
using namespace std;
 
// Function to find the N players
// the game against each other or not
string calculate(int N, int T)
{
   
   // Base Case
    if (N <= 1 || T <= 0) {
       
      // Return -1 if not valid
        return "-1";
    }
   
  // Converting hours into minutes
    int minutes = T * 60;
   
   // Calculating maximum games that
    // can be played.
    int max_match = N - 1;
   
  // Time required for conducting
    // maximum games
    int max_time = max_match * 30;
 
  // Checking if it is possible
    // to conduct maximum games
    if (max_time <= minutes) {
       
      // Return possible
        return "Possible";
    }
 
  // Calculating minimum games
    int min_match = N / 2;
    min_match = N - min_match;
   
  // Time required for conducting
    // minimum games
    int min_time = min_match * 30;
 
  // Checking if it is possible
   // to conduct minimum games
    if (min_time <= minutes) {
       
      // Return possible
        return "Possible";
    }
 
  // Return not possible if time
   // is less than required time
    return "Not Possible";
}
 
 // Driver Code
 // Total count of players
int main()
{
    int N = 6, T = 2;
   
  // function call
    cout << calculate(N, T);
    return 0;
}
 
// This code is contributed by Parth Manchanda

Java

// Java program for the above approach
import java.io.*;
 
class GFG {
 
// Function to find the N players
// the game against each other or not
static String calculate(int N, int T)
{
   
   // Base Case
    if (N <= 1 || T <= 0) {
       
      // Return -1 if not valid
        return "-1";
    }
   
  // Converting hours into minutes
    int minutes = T * 60;
   
   // Calculating maximum games that
    // can be played.
    int max_match = N - 1;
   
  // Time required for conducting
    // maximum games
    int max_time = max_match * 30;
 
  // Checking if it is possible
    // to conduct maximum games
    if (max_time <= minutes) {
       
      // Return possible
        return "Possible";
    }
 
  // Calculating minimum games
    int min_match = N / 2;
    min_match = N - min_match;
   
  // Time required for conducting
    // minimum games
    int min_time = min_match * 30;
 
  // Checking if it is possible
   // to conduct minimum games
    if (min_time <= minutes) {
       
      // Return possible
        return "Possible";
    }
 
  // Return not possible if time
   // is less than required time
    return "Not Possible";
}
 
// Driver code
public static void main(String[] args)
{
    int N = 6, T = 2;
   
    // function call
    System.out.println(calculate(N, T));
}
}
 
// This code is contributed by sanjoy_62.

Python3

# Python program for the above problem
 
 
 
# Function to find the N players
# the game against each other or not
def calculate(N, T):
 
 
    # Base Case
    if N <= 1 or T <= 0:
 
        # Return -1 if not valid
        return -1
 
 
    # Converting hours into minutes
    minutes = T * 60
 
 
    # Calculating maximum games that
    # can be played.
    max_match = N - 1
 
 
    # Time required for conducting
    # maximum games
    max_time = max_match * 30
 
 
    # Checking if it is possible
    # to conduct maximum games
    if max_time <= minutes:
 
 
        # Return possible
        return "Possible"
 
 
    # Calculating minimum games
    min_match = N//2
    min_match = N - min_match
 
 
    # Time required for conducting
    # minimum games
    min_time = min_match * 30
 
 
    # Checking if it is possible
    # to conduct minimum games
    if min_time <= minutes:
 
 
        # Return possible
        return "Possible"
 
 
    # Return not possible if time
    # is less than required time
    return "Not Possible"
 
 
 
# Driver Code
if __name__ == "__main__":
 
 
    # Total count of players
    N = 6
 
 
    # Given hours
    T = 2
 
 
    # Function call
    ans = calculate(N, T)
 
 
    # Print ans
    print(ans)

C#

// C# program for the above approach
using System;
 
class GFG{
 
// Function to find the N players
// the game against each other or not
static string calculate(int N, int T)
{
   
   // Base Case
    if (N <= 1 || T <= 0) {
       
      // Return -1 if not valid
        return "-1";
    }
   
  // Converting hours into minutes
    int minutes = T * 60;
   
   // Calculating maximum games that
    // can be played.
    int max_match = N - 1;
   
  // Time required for conducting
    // maximum games
    int max_time = max_match * 30;
 
  // Checking if it is possible
    // to conduct maximum games
    if (max_time <= minutes) {
       
      // Return possible
        return "Possible";
    }
 
  // Calculating minimum games
    int min_match = N / 2;
    min_match = N - min_match;
   
  // Time required for conducting
    // minimum games
    int min_time = min_match * 30;
 
  // Checking if it is possible
   // to conduct minimum games
    if (min_time <= minutes) {
       
      // Return possible
        return "Possible";
    }
 
  // Return not possible if time
   // is less than required time
    return "Not Possible";
}
 
// Driver Code
public static void Main(String[] args)
{
    int N = 6, T = 2;
   
  // function call
    Console.WriteLine(calculate(N, T));
}
}
 
// This code is contributed by splevel62.

Javascript

<script>
       // JavaScript Program for the above approach
 
       // Function to find the N players
       // the game against each other or not
       function calculate(N, T)
       {
 
           // Base Case
           if (N <= 1 || T <= 0)
           {
 
               // Return -1 if not valid
               return -1;
           }
 
           // Converting hours into minutes
           let minutes = T * 60;
 
           // Calculating maximum games that
           // can be played.
           let max_match = N - 1
 
           // Time required for conducting
           // maximum games
           max_time = max_match * 30
 
           // Checking if it is possible
           // to conduct maximum games
           if (max_time <= minutes)
           {
            
               // Return possible
               return "Possible";
           }
 
           // Calculating minimum games
           min_match = Math.floor(N / 2);
           min_match = N - min_match
 
           // Time required for conducting
           // minimum games
           min_time = min_match * 30;
 
           // Checking if it is possible
           // to conduct minimum games
           if (min_time <= minutes)
           {
            
               // Return possible
               return "Possible";
 
               // Return not possible if time
               // is less than required time
               return "Not Possible";
           }
 
       }
 
       // Driver Code
       // Total count of players
       let N = 6
 
       // Given hours
       let T = 2
 
       // Function call
       let ans = calculate(N, T)
 
       // Print ans
       document.write(ans);
 
   // This code is contributed by Potta Lokesh
   </script>
Producción: 

Possible

 

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

Publicación traducida automáticamente

Artículo escrito por rakshitarora 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 *