Related Articles

# Game of replacing array elements

• Difficulty Level : Easy
• Last Updated : 08 Jun, 2021

There are two players A and B who are interested in playing a game of numbers. In each move a player pick two distinct number, let’s say a1 and a2 and then replace all a2 by a1 or a1 by a2. They stop playing game if any one of them is unable to pick two number and the player who is unable to pick two distinct number in an array, looses the game. First player always move first and then second. Task is to find which player wins.
Examples:

```Input :  arr[] = { 1, 3, 3, 2,, 2, 1 }
Output : Player 2 wins
Explanation:
First plays always looses irrespective
of the numbers chosen by him. For example,
say first player picks ( 1 & 3)
replace all 3 by 1
Now array Become { 1, 1, 1, 2, 2, 1 }
Then second player picks ( 1  2 )
either he replace 1 by 2 or 2 by 1
Array Become { 1, 1, 1, 1, 1, 1 }
Now first player is not able to choose.

Input  : arr[] = { 1, 2, 1, 2 }
Output : Player 1 wins```

From above examples, we can observe that if number of count of distinct element is even, first player always wins. Else second player wins.
Lets take an another example :

`  int arr[] =  1, 2, 3, 4, 5, 6 `

Here number of distinct element is even(n). If player 1 pick any two number lets say (4, 1), then we left with n-1 distinct element. So player second left with n-1 distinct element. This precess go on until distinct element become 1. Here n = 6

```Player   :  P1    p2    P1   p2    P1     P2
distinct : [n, n-1, n-2, n-3, n-4, n-5 ]

"At this point no distinct element left,
so p2 is unable to pick two Dis element."```

Below implementation of above idea :

## C++

 `// CPP program for Game of Replacement``#include ``using` `namespace` `std;` `// Function return which player win the game``int` `playGame(``int` `arr[], ``int` `n)``{``    ``// Create hash that will stores``    ``// all distinct element``    ``unordered_set<``int``> hash;` `    ``// Traverse an array element``    ``for` `(``int` `i = 0; i < n; i++)``        ``hash.insert(arr[i]);` `    ``return` `(hash.size() % 2 == 0 ? 1 : 2);``}` `// Driver Function``int` `main()``{``    ``int` `arr[] = { 1, 1, 2, 2, 2, 2 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);` `    ``cout << ``"Player "` `<< playGame(arr, n) << ``" Wins"` `<< endl;``    ``return` `0;``}`

## Java

 `// Java program for Game of Replacement``import` `java.util.HashSet;``public` `class` `GameOfReplacingArrayElements``{``    ``// Function return which player win the game``    ``public` `static` `int` `playGame(``int` `arr[])``    ``{``        ``// Create hash that will stores``        ``// all distinct element``        ``HashSet set=``new` `HashSet<>();` `        ``// Traverse an array element``        ``for``(``int` `i:arr)``            ``set.add(i);``        ``return` `(set.size()%``2``==``0``)?``1``:``2``;``    ``}` `    ``public` `static` `void` `main(String args[]) {``        ``int` `arr[] = { ``1``, ``1``, ``2``, ``2``, ``2``, ``2` `};``        ``System.out.print(``"Player "``+playGame(arr)+``" wins"``);``    ``}``}``//This code is contributed by Gaurav Tiwari`

## Python3

 `# Python program for Game of Replacement` `# Function return which player win the game``def` `playGame(arr, n):` `    ``# Create hash that will stores``    ``# all distinct element``    ``s ``=` `set``()` `    ``# Traverse an array element``    ``for` `i ``in` `range``(n):``        ``s.add(arr[i])``    ``return` `1` `if` `len``(s) ``%` `2` `=``=` `0` `else` `2` `# Driver code``arr ``=` `[``1``, ``1``, ``2``, ``2``, ``2``, ``2``]``n ``=` `len``(arr)``print``(``"Player"``,playGame(arr, n),``"Wins"``)` `# This code is contributed by Shrikant13`

## C#

 `// C# program for Game of Replacement``using` `System;``using` `System.Collections.Generic;` `public` `class` `GameOfReplacingArrayElements``{``    ``// Function return which player win the game``    ``public` `static` `int` `playGame(``int` `[]arr)``    ``{``        ``// Create hash that will stores``        ``// all distinct element``        ``HashSet<``int``> ``set` `= ``new` `HashSet<``int``>();` `        ``// Traverse an array element``        ``foreach``(``int` `i ``in` `arr)``            ``set``.Add(i);``        ``return` `(``set``.Count % 2 == 0) ? 1 : 2;``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main(String []args)``    ``{``        ``int` `[]arr = { 1, 1, 2, 2, 2, 2 };``        ``Console.Write(``"Player "` `+ playGame(arr) + ``" wins"``);``    ``}``}` `// This code has been contributed by 29AjayKumar`

## Javascript

 ``

Output:

`Player 1 Wins`

Time Complexity : O(n)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up