3623 - insule01

From Bitnami MediaWiki

Cerinţa

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

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

Date de ieșire

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

  • 1 ⩽ n ⩽ 1.000.000.000

Exemplul 1

Intrare
2 
Iesire
Datele de intrare corespund restrictiilor impuse
6

Exemplu 2

Intrare
1000000001
Iesire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare

<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

Ş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.