3623 - insule01

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dă n un număr natural. Într-un şir de lungime n, format cu cifrele 0 şi 1, numim insulă o secvenţă maximă de cifre egale. Să se afle câte insule se află în toate şirurile de lungime n, formate cu cifrele 0 şi 1.

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 insulelor care se află în toate şirurile de lungime n, formate cu cifrele 0 şi 1. Deoarece acest număr este prea mare, se va afişa modulo 1.000.000.007.

Restricţii şi precizări[edit | edit source]

  • 1 ⩽ n ⩽ 1.000.000.000

Exemplul 1[edit | edit source]

Intrare
2 
Iesire
Datele de intrare corespund restrictiilor impuse
6

Exemplu 2[edit | edit source]

Intrare
1000000001
Iesire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def compute_islands(n):

   mod = 1000000007
   dp = [0] * (n+1)
   dp[1] = 2
   dp[2] = 6
   for i in range(3, n+1):
       dp[i] = (dp[i-1] * 2 + dp[i-2] * 2) % mod
   return dp[n]


def main():

   n = int(input())
   if n > pow(10, 9):
       print("Datele de intrare nu corespund restrictiilor impuse")
       return
   islands = compute_islands(n)
   print("Datele de intrare corespund restrictiilor impuse")
   print(islands)


if __name__ == "__main__":

   main()

</syntaxhighlight>

Explicatie[edit | edit source]

Şirurile de lungime 2 formate cu cifrele 0 şi 1 sunt 00, 01, 10, 11, acestea conţinând 1, 2, 2, respectiv 1 insule. În total sunt 6 insule.