Game of replacing array elements

02 Sep, 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, loses 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 loses 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 process 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++
Java
Python3
C#
Javascript
// CPP program for Game of Replacement#include <bits/stdc++.h>using namespace std; // Function return which player win the gameint 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 Functionint main(){    int arr[] = { 1, 1, 2, 2, 2, 2 };    int n = sizeof(arr) / sizeof(arr[0]);     cout << "Player " << playGame(arr, n) << " Wins" << endl;    return 0;}
// Java program for Game of Replacementimport 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<Integer> 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
# Python program for Game of Replacement # Function return which player win the gamedef 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 codearr = [1, 1, 2, 2, 2, 2]n = len(arr)print("Player",playGame(arr, n),"Wins") # This code is contributed by Shrikant13
// C# program for Game of Replacementusing 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
<script> // Javascript program for Game of Replacement // Function return which player win the gamefunction playGame(arr, n){     // Create hash that will stores    // all distinct element    var hash = new Set();     // Traverse an array element    for (var i = 0; i < n; i++)        hash.add(arr[i]);     return (hash.size % 2 == 0 ? 1 : 2);} // Driver Functionvar arr = [1, 1, 2, 2, 2, 2];var n = arr.length;document.write( "Player " + playGame(arr, n) + " Wins" ); // This code is contributed by importantly.</script>
Output: 
Player 1 Wins
Time Complexity : O(n) 
_Gaurav_Tiwari
shrikanth13
29AjayKumar
importantly
simranarora5sos
Arrays
Game Theory
Hash
Arrays
Hash
Game Theory
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.