日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

牛客18987 粉嘤花之恋(矩阵快速幂、斐波那契数列)

發布時間:2024/7/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客18987 粉嘤花之恋(矩阵快速幂、斐波那契数列) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接:https://ac.nowcoder.com/acm/problem/18987
來源:牛客網

時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld

題目描述

qn是個特別可愛的小哥哥,qy是個特別好的小姐姐,他們兩個是一對好朋友 [ cp (劃掉~)
又是一年嚶花爛漫時,小qn于是就邀請了qy去嚶花盛開的地方去玩。當qy和qn來到了田野里時,qy驚奇的發現,嚶花花瓣以肉眼可見的速度從樹上長了出來。
仔細看看的話,花瓣實際上是以一定規律長出來的,而且,每次張成新的花瓣的時候,上一次的花瓣就會都落到地上,而且不會消失。
花瓣生長的規律是,當次數大于等于2時,第i次長出來的花瓣個數和上一次張出來的花瓣個數的差是斐波那契數列的第i-1項。初始的時候地上沒有花瓣,樹上的花瓣個數為1,第一次生長的花瓣個數為1。初始的那個花瓣就落到了地上
現在,小qn想知道,經過k次生長之后,樹上和地上的總花瓣個數是多少?
ps:斐波那契數列:
f[1]=f[2]=1;f[i]=f[i-1]+f[i-2] (i>=2且i ∈ N+)

輸入描述:

一行一個數k

輸出描述:

一行一個數m,表示第k次生長過后,樹上和地上的總花瓣數是多少。由于答案會很大,請你將答案mod 998244353后輸出

題意不難理解,最終結果是要求斐波那契數列的前k+1項之和 , 又因為Sn = f(n+2) - 1, 所以最后就是求 f(n+3)-1

普通的斐波那契數列求解可以用遞歸(時間復雜度O(2^N)),但是這里的數據太大,會超時,
所以這里用矩陣快速冪(時間復雜度O(logN))來求解。



[F(n),F(n-1)] = [F(1), F(0)] * [[1 1] [1 0]]^(n-1)

F(n)的獲取方法有兩種

  • 第一種,是取矩陣運算結果的第一行第一列,
    由[F(n),F(n-1)] = [F(1), F(0)] * [[1 1] [1 0]]^(n-1)得,矩陣運算n-1次
  • 第二種,取矩陣運算結果第一行元素之和,
    由[F(n-1),F(n-2)] = [F(1), F(0)] * [[1 1] [1 0]]^(n-2), F(n) = F(n-1)+F(n-2),矩陣運算n-2次
GLOBAL_MOD = 998244353 k = int(input())""" 題意不難理解,最終結果是要求斐波那契數列的前k+1項之和 , 又因為Sn = f(n+2) - 1, 所以最后就是求 f(n+3)-1普通的斐波那契數列求解可以用遞歸(時間復雜度O(2^N)),但是這里的數據太大,會超時, 所以這里用矩陣快速冪(時間復雜度O(logN))來求解。[F(n),F(n-1)] = [F(1), F(0)] * [[1 1] [1 0]]^(n-1)F(n)的獲取方法有兩種 第一種,是取矩陣運算結果的第一行第一列, 由[F(n),F(n-1)] = [F(1), F(0)] * [[1 1] [1 0]]^(n-1)得,矩陣運算n-1次 第二種,取矩陣運算結果第一行元素之和, 由[F(n-1),F(n-2)] = [F(1), F(0)] * [[1 1] [1 0]]^(n-2), F(n) = F(n-1)+F(n-2),矩陣運算n-2次 """ class Solution:def fib(self, n: int) -> int:if n < 2:return nres = self.matrixpower(n-1)res = res[0][0]-1res = res % GLOBAL_MODreturn resdef matrixpower(self, power):# res初始值為單位矩陣res = [[1, 0],[0, 1]] base = [[1, 1],[1, 0]] # 這個是我們根據斐波那契數列的特點構造的矩陣 while power !=0:if power&1 !=0:res = self.multimatrix(res, base)power = power>>1base = self.multimatrix(base, base)return resdef multimatrix(self, m1, m2):n = len(m1)res = [[0]*n for i in range(n)]for i in range(n):for j in range(n):for k in range(n):res[i][j] = (res[i][j]+m1[i][k] * m2[k][j])%GLOBAL_MODreturn resans = Solution() print((ans.fib(k+3)))

總結

以上是生活随笔為你收集整理的牛客18987 粉嘤花之恋(矩阵快速幂、斐波那契数列)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。