藍橋杯VIP試題 演算法訓練 奇異的蟲群

2021-10-03 08:42:15 字數 1519 閱讀 2161

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

在乙個奇怪的星球上駐紮著兩個蟲群a和b,它們用奇怪的方式繁殖著,在t+1時刻a蟲群的數量等於t時刻a蟲群和b蟲群數量之和,t+1時刻b蟲群的數量等於t時刻a蟲群的數量。由於星際空間的時間維度很廣闊,所以t可能很大。overmind 想知道在t時刻a蟲群的數量對 p = 1,000,000,007.取餘數的結果。當t=1時 a種群和b種群的數量均為1。

輸入格式

測試資料報含乙個整數t,代表繁殖的時間。

輸出格式

輸出一行,包含乙個整數,表示對p取餘數的結果

樣例輸入

10樣例輸出

89樣例輸入

65536

樣例輸出

462302286

資料規模和約定

對於50%的資料 t<=10^9

對於70%的資料 t<=10^15

對於100%的資料 t<=10^18

思路:本題如果用常規的做法,輸入時間一直遍歷,時間到了之後對1000000007取餘輸出,那只有乙個結果,就是數字太大導致超時。

那麼仔細看看這道題發現他的規律與斐波那契數列一樣,所以我們可以用快速冪矩陣的方法對其求解,可以大大減少執行的時間。我們看看如何用矩陣求解,斐波那契數列公式為fn=fn-1+fn-2,如何用fn-1、fn-2乘以乙個矩陣得到fn,我們看看這個:

上面可以定義乙個矩陣為,每次相乘可得下一次的結果,為了減少時間,必須記錄每次計算的值,比如2*2=4為四次冪,也相當於計算了四次,比如當時間為9,即計算第一次變成平方,記錄下來,二次計算為四次方,三次為八次方,再乘以原來的一次即為九次,原本需要計算八次的四次計算就可以了。而在這當中需要考慮偶數和奇數的情況,這與另外乙個題矩陣乘方的做法一樣(我的部落格中這篇文章進行了說明,這裡就不多說了),如果為2的冪方的可以直接進行計算,不是2的冪方的就得另外做考慮,所以此題用矩陣的快速冪做法可以解決常規做法執行超時的問題,也能讓我們加深對這種方法的理解。

**如下:

#include

#include

using

namespace std;

voidks(

long

long a1[2]

[2],

long

long b1[2]

[2])

}}memcpy

(a1,c,

sizeof

(c));}

intmain()

,b[2][

2]=;

cin>>t;

while

(t>0)

ks(a,a)

; t/=2

;//有些做法將t%2==1為n&1,t/2為t>>=1與本題中計算結果一樣

} cout<

[0]%

1000000007

;}

藍橋杯VIP試題 演算法訓練 最大獲利

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 chakra是一位年輕有為的企業家,最近他在進軍餐飲行業。他在各地開拓市場,共買下了n個飯店。在初期的市場調研中,他將一天劃分為m個時間段,並且知道第i個飯店在第j個時間段內,會有aij位服務員當值和bij位客戶光臨。他還分析了不同...

藍橋杯VIP試題 演算法訓練 比賽安排

資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 設有有2 n n 6 個球隊進行單迴圈比賽,計畫在2 n 1天內完成,每個隊每天進行一場比賽。設計乙個比賽的安排,使在2 n 1天內每個隊都與不同的對手比賽。輸入格式 輸入檔案matchplan.in共一行,輸入n的數值。輸出格式 ...

藍橋杯VIP試題 演算法訓練 排列問題

資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 求乙個0 n 1的排列 即每個數只能出現一次 給出限制條件 一張n n的表,第i行第j列的1或0,表示為j 1這個數不能出現在i 1這個數後面,並保證第i行第i列為0 將這個排列看成乙個自然數,求從小到大排序第k個排列。資料規模和約...