3827 - C Bombs

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

Cerința[edit]

Le Quack vrea să bombardeze un oraș având N bombe numerotate de la 1...N. Dacă el detonează bombă cu valorea i atunci va putea să detoneze doar bombe încă nedetonate cu valori mai mici decât i. În cazul în care nu mai există astfel de bombe , poate detona orice bombă nedetonata. Le Quack va da numărul N și vrea să îi spuneți în câte moduri poate detona toate cele N bombe după regulă descrisă anterior.

Date de intrare[edit]

Inputul conține un număr natural n , reprezentând numărul de bombe pe care le are Le Quack.

Date de ieșire[edit]

Outputul conține răspunsul modulo 666013.

Restricții și precizări[edit]

N ≤ 2000. Pentru teste în valoare de 10p, N ≤ 9. Pentru restul testelor în valoare de 90p, N ≤ 2000. ==Exemplu==: bombs.in

2 bombs.out

2 bombs.in

3 bombs.out

5

Explicație[edit]

În primul exemplu, configurațiile posibile sunt: [1 , 2] și [2 , 1]. În al doilea exemplu, configurațiile posibile sunt: [1 , 2 , 3] , [3 , 2 , 1] , [2 , 1 , 3] , [3 , 1 , 2] , [1 , 3 , 2]. Configurația [2 , 3 , 1] nu este bună, deoarece am luat bombă 3 înainte să termin toate bombele cu indici mai mici decât 2, ceea ce contrazice regula lui Le Quack.

Rezolvare[edit]

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

def numar_moduri_detonare(n):

  DP = [0] * (n + 1)
  DP[0] = 1
  for i in range(1, n + 1):
      for j in range(i):
          DP[i] = (DP[i] + DP[j]) % MOD
  return DP[n]

if __name__ == "__main__":

  # Citim datele de intrare
  n = int(input())
  # Calculăm rezultatul și afișăm rezultatul
  rezultat = numar_moduri_detonare(n)
  print(rezultat)


</syntaxhighlight>