Formas de pintar N pinturas de modo que las pinturas adyacentes no tengan los mismos colores

Dados dos números enteros n y m, donde n representan unos cuadros numerados del 1 al n ym representan unos colores del 1 al m con cantidad ilimitada. La tarea es encontrar el número de formas de pintar las pinturas de manera que no haya dos pinturas consecutivas que tengan los mismos colores.
Nota: La respuesta debe calcularse en módulo 10^9 +7 ya que la respuesta puede ser muy grande. 
Ejemplos: 
 

Input: n = 4, m = 2 
Output: 2

Input: n = 4, m = 6
Output: 750

Preguntado en: Enfoque  de National Instruments :
El número total de color dado es my el total de pinturas es de 1 a n . De acuerdo con la condición de que no haya dos pinturas adyacentes que tengan el mismo color, la primera pintura puede ser pintada por cualquiera de m colores y el resto de cualquier pintura puede ser pintada por cualquiera de m-1 color excepto el color utilizado para la pintura anterior. que. Por lo tanto, si derivamos la solución para el número total de formas, 
 

m * (m-1)^(n-1) es la respuesta real. 

Ahora, esto se puede calcular por iteración simple o por el método de cálculo de potencia eficiente en tiempo O (logn) .
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation of the above approach
#include <bits/stdc++.h>
#define modd 1000000007
using namespace std;
 
// Function for finding the power
unsigned long power(unsigned long x,
                    unsigned long y, unsigned long p)
{
    unsigned long res = 1; // Initialize result
 
    x = x % p; // Update x if it is more than or
    // equal to p
 
    while (y > 0) {
 
        // If y is odd, multiply x with result
        if (y & 1)
            res = (res%p * x%p) % p;
 
        // y must be even now
        y = y >> 1; // y = y/2
        x = (x%p * x%p) % p;
    }
    return res;
}
 
// Function to calculate the number of ways
int ways(int n, int m)
{
    // Answer must be modulo of 10^9 + 7
    return power(m - 1, n - 1, modd) * m % modd;
}
 
// Driver code
int main()
{
    int n = 5, m = 5;
    cout << ways(n, m);
 
    return 0;
}

Java

// Java implementation of the above approach
 
class GFG
{
    static final int modd = 1000000007;
 
    // Function for finding the power
    static long power(long x, long y, long p)
    {
        long res = 1; // Initialize result
 
        // Update x if it is more than or
        // equal to p
        x = x % p;
 
        while (y > 0)
        {
            // If y is odd, multiply x with result
            if (y % 2 == 1)
            {
                res = (res%p * x%p) % p;
            }
 
            // y must be even now
            y = y >> 1; // y = y/2
            x = (x%p * x%p) % p;
        }
        return res;
    }
 
    // Function to calculate the number of ways
    static int ways(int n, int m)
    {
        // Answer must be modulo of 10^9 + 7
        return (int) (power(m - 1, n - 1, modd)
                            * m % modd);
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int n = 5, m = 5;
        System.out.println(ways(n, m));
         
    }
}
 
// This code is contributed by 29AjayKumar

Python3

# Python3 implementation of the
# above approach
 
modd = 1000000007
 
# Function for finding the power
def power(x, y, p):
 
    res = 1 # Initialize result
 
    x = x % p # Update x if it is more
              # than or equal to p
 
    while (y > 0):
 
        # If y is odd, multiply x with result
        if (y & 1):
            res = (res%p * x%p) % p
 
        # y must be even now
        y = y >> 1 # y = y/2
        x = (x%p * x%p) % p
 
    return res
 
# Function to calculate the number of ways
def ways(n, m):
     
    # Answer must be modulo of 10^9 + 7
    return power(m - 1, n - 1, modd) * m % modd
 
# Driver code
n, m = 5, 5
print(ways(n, m))
 
# This code is contributed
# by Mohit Kumar 29

C#

// C# implementation of the above approach
using System;
 
class GFG
{
    static int modd = 1000000007;
 
    // Function for finding the power
    static long power(long x, long y, long p)
    {
        long res = 1; // Initialize result
 
        // Update x if it is more than or
        // equal to p
        x = x % p;
 
        while (y > 0)
        {
            // If y is odd, multiply x with result
            if (y % 2 == 1)
            {
                res = (res%p * x%p) % p;
            }
 
            // y must be even now
            y = y >> 1; // y = y/2
            x = (x%p * x%p) % p;
        }
        return res;
    }
 
    // Function to calculate the number of ways
    static int ways(int n, int m)
    {
        // Answer must be modulo of 10^9 + 7
        return (int) (power(m - 1, n - 1, modd)
                            * m % modd);
    }
 
    // Driver code
    static public void Main ()
    {
            int n = 5, m = 5;
        Console.WriteLine(ways(n, m));
    }
}
 
// This code is contributed by ajit

PHP

<?php
// PHP implementation of the above approach
 
// Iterative Function to calculate
// (x^y)%p in O(log y)
function power($x, $y, $p)
{
    // Initialize result
    $res = 1;
 
    // Update x if it is more
    // than or equal to p
    $x = $x % $p;
 
    while ($y > 0)
    {
        // If y is odd, multiply
        // x with result
        if ($y & 1)
            $res = ($res % $p * $x % $p) % $p;
 
        // y must be even now
         
        // y = $y/2
        $y = $y >> 1;
        $x = ($x % $p * $x % $p) % $p;
    }
    return $res;
}
 
// Function to calculate the number of ways
function ways($n, $m)
{
    $modd =1000000007;
     
    // Answer must be modulo of 10^9 + 7
    return (power($m - 1, $n - 1,
                  $modd) * $m ) % $modd;
}
 
// Driver code
$n = 5;
$m = 5;
echo ways($n, $m);
 
// This code is contributed
// by Arnab Kundu
?>

Javascript

<script>
    // Javascript implementation of the above approach
     
    let modd = 1000000007;
   
    // Function for finding the power
    function power(x, y, p)
    {
        let res = 1; // Initialize result
   
        // Update x if it is more than or
        // equal to p
        x = x % p;
   
        while (y > 0)
        {
            // If y is odd, multiply x with result
            if (y % 2 == 1)
            {
                res = (res%p * x%p) % p;
            }
   
            // y must be even now
            y = y >> 1; // y = y/2
            x = (x%p * x%p) % p;
        }
        return res;
    }
   
    // Function to calculate the number of ways
    function ways(n, m)
    {
        // Answer must be modulo of 10^9 + 7
        return (power(m - 1, n - 1, modd) * m % modd);
    }
     
    let n = 5, m = 5;
      document.write(ways(n, m));
 
</script>
Producción: 

1280

 

Complejidad de Tiempo: O(logN)
Espacio Auxiliar: O(1), ya que no se ha tomado espacio extra.

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 *