3214 - Dinamica 04

From Bitnami MediaWiki
Revision as of 18:27, 11 January 2024 by Mraa (talk | contribs) (→‎Rezolvare)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Definim un număr natural ca fiind bun dacă toate cifrele impare se află înaintea celor pare. De exemplu, numerele 13424, 400, 1357 sunt bune, pe când 34010 nu este.

Cerința[edit | edit source]

Dându-se un număr natural nenul n, să se determine câte numere bune de n cifre există. Pentru că acest număr poate fi foarte mare, se va determina răspunsul modulo 123457.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran numărul de numere bune de n cifre, modulo 123457.

Restricții și precizări[edit | edit source]

Pentru 70% din punctaj, 1 ≤ n ≤ 100.000 Pentru 30% din punctaj, 100.001 ≤ n ≤ 1.000.000.000 ==Exemplu==: Intrare

3 Ieșire

475

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> MOD = 123457

def numere_bune(n):

  # Inițializăm matricea dp cu 0-uri
  dp = [[0] * 2 for _ in range(n + 1)]
  # Pentru un singur caracter, avem 5 opțiuni (cifrele impare)
  dp[1][0] = 5
  dp[1][1] = 0
  # Calculăm numărul de numere bune pentru n caractere
  for i in range(2, n + 1):
      dp[i][0] = (dp[i - 1][0] * 5 + dp[i - 1][1] * 5) % MOD
      dp[i][1] = dp[i - 1][0]
  return (dp[n][0] + dp[n][1]) % MOD

if __name__ == "__main__":

  n = int(input("Introduceți n: "))
  
  rezultat = numere_bune(n)
  
  print(rezultat)

</syntaxhighlight>