Identify the Most Strongest Programmer
Last Updated :
05 Dec, 2023
There are N Players in a Game and you have given M pieces of information about their superiority. The ith information ( infromation[i] = {Ai, Bi} ) states that “Player Ai > Player Bi“, the task is to determine the number of the strongest programmers among the N players based on the provided information. If there is a unique strongest programmer, print their number. Otherwise, if there are multiple possible strongest programmers or cannot be determined, print -1.
Examples:
Input: N = 3, M = 2, information[] = [[1, 2], [2, 3]]
Output: 1
Input: N = 6, M = 6, information[] = [[1, 6], [6, 5], [6, 2], [2, 3], [4, 3], [4, 2]]
Output: -1
Approach: To solve the problem follow the below idea:
This problem can be solved using transitive property and some observations.
- If there exists a player for which there are no other players stronger than him then he will be the strongest player.
- To efficiently determine the strongest player among N competitors, We count how many people are stronger than each player.
- It iterates through the given information, updating the count based on the transitive nature of superiority.
- It then checks if there is exactly one candidate with zero stronger players, indicating the strongest person.
- If there are multiple candidates, it cannot identify the Most strongest player in that case we return -1.
Steps to solve the problem:
- Read the input values N (the number of programmers) and M (the number of pieces of information).
- Create a vector deg[] to keep track of the count of people stronger than each person i. Initialize all elements of deg[] to 0.
- For each pair of information (A[i], B[i]) in the given M pieces of information, This step is equivalent to adding 1 to the count of people stronger than each programmer A[i].
- Initialize the answer variable ans to -1, which will store the result.
- Iterate over all the player from 1 to N.
- If there is a player i having deg[i] = 0, then assign i to strongest player and if strongest programmer is not -1 , i.e. there exist another stronger programmer then print -1 and exit the code.
- In the end print strongest programmer
Below is the implementation of above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int findStrongestProgrammer( int N, int M,
vector<pair< int , int > > power)
{
vector< int > deg(N + 1, 0);
for ( int i = 0; i < M; i++) {
int a = power[i].first;
int b = power[i].second;
deg[b]++;
}
int strongest_programmer = -1;
for ( int i = 1; i <= N; i++) {
if (deg[i] == 0) {
if (strongest_programmer != -1) {
return -1;
}
else {
strongest_programmer = i;
}
}
}
return strongest_programmer;
}
int main()
{
int N = 3, M = 2;
vector<pair< int , int > > power = { { 1, 2 }, { 2, 3 } };
int result = findStrongestProgrammer(N, M, power);
if (result == -1) {
cout << -1 << endl;
}
else {
cout << result << endl;
}
return 0;
}
|
Java
public class GFG {
static int findStrongestProgrammer( int N, int M, int [][] power) {
int [] deg = new int [N + 1 ];
for ( int i = 0 ; i < M; i++) {
int b = power[i][ 1 ];
deg[b]++;
}
int strongestProgrammer = - 1 ;
for ( int i = 1 ; i <= N; i++) {
if (deg[i] == 0 ) {
if (strongestProgrammer != - 1 ) {
return - 1 ;
} else {
strongestProgrammer = i;
}
}
}
return strongestProgrammer;
}
public static void main(String[] args) {
int N = 3 ;
int M = 2 ;
int [][] power = new int [M][];
power[ 0 ] = new int []{ 1 , 2 };
power[ 1 ] = new int []{ 2 , 3 };
int result = findStrongestProgrammer(N, M, power);
if (result == - 1 ) {
System.out.println(- 1 );
} else {
System.out.println(result);
}
}
}
|
Python3
def findStrongestProgrammer(N, M, power):
deg = [ 0 ] * (N + 1 )
for i in range (M):
a, b = power[i]
deg[b] + = 1
strongest_programmer = - 1
for i in range ( 1 , N + 1 ):
if deg[i] = = 0 :
if strongest_programmer ! = - 1 :
return - 1
else :
strongest_programmer = i
return strongest_programmer
if __name__ = = "__main__" :
N = 3
M = 2
power = [( 1 , 2 ), ( 2 , 3 )]
result = findStrongestProgrammer(N, M, power)
if result = = - 1 :
print ( - 1 )
else :
print (result)
|
C#
using System;
class Program
{
static int FindStrongestProgrammer( int N, int M, int [][] power)
{
int [] deg = new int [N + 1];
for ( int i = 0; i < M; i++)
{
int b = power[i][1];
deg[b]++;
}
int strongestProgrammer = -1;
for ( int i = 1; i <= N; i++)
{
if (deg[i] == 0)
{
if (strongestProgrammer != -1)
{
return -1;
}
else
{
strongestProgrammer = i;
}
}
}
return strongestProgrammer;
}
static void Main()
{
int N = 3;
int M = 2;
int [][] power = new int [M][];
power[0] = new int [] { 1, 2 };
power[1] = new int [] { 2, 3 };
int result = FindStrongestProgrammer(N, M, power);
if (result == -1)
{
Console.WriteLine(-1);
}
else
{
Console.WriteLine(result);
}
}
}
|
Javascript
function findStrongestProgrammer(N, M, power) {
const deg = new Array(N + 1).fill(0);
for (let i = 0; i < M; i++) {
const a = power[i][0];
const b = power[i][1];
deg[b]++;
}
let strongestProgrammer = -1;
for (let i = 1; i <= N; i++) {
if (deg[i] === 0) {
if (strongestProgrammer !== -1) {
return -1;
} else {
strongestProgrammer = i;
}
}
}
return strongestProgrammer;
}
const N = 3;
const M = 2;
const power = [[1, 2], [2, 3]];
const result = findStrongestProgrammer(N, M, power);
if (result === -1) {
console.log(-1);
} else {
console.log(result);
}
|
Time Complexity: O(N+M)
Auxiliary Space: O(N)
Share your thoughts in the comments
Please Login to comment...