隊內賽我出的一道題附標程與解題報告

2021-08-26 10:43:45 字數 1653 閱讀 2940

time limit:1000ms

zzy領養了一對剛剛出生的不知名小寵物..巨萌巨可愛!!...小寵物的生命為5個單位時間並且不會在中間出意外翹辮子(如:從0出生能活到5但活不到6)..小寵物經過2個單位時間成熟..剛剛成熟的一對小寵物能立即生育6只新的小寵物(如:從0出生的一對在2時成熟並進行第一次生育)...小寵物是很忠誠的..不會在中途換伴侶..每對小寵物生育一次這一對的生育能力就會降低2個..也就是說一對小寵物在第二次生育時就只能生4個了..小寵物成熟後每個單位時間都會盡力的生育(例:從0出生的一對..2時間生6個..3時間生4個..4時間生2個...5時間生不出..6時間這一對已經掛了..)..生育出來的新小寵物會繼續這個過程..

zzy想知道從單位時間0開始..經過m個單位時間(時間為m時)將有多少只活著的小寵物(0時刻有2只小寵物)

因為zzy隱隱地覺得什麼地方怪怪的...所以請將這個數目mod10000

多組資料讀到eof

每組資料一行:

m ( 0<=m<=2000000000 )

最多500組資料

每組輸出一行為case 組號: 答案,即m時刻活著的小寵物個數%1000001

2348

case 1: 2

case 2: 2

case 3: 8

case 4: 12

case 5: 32

case 6: 528

zzy原創的說..

解題報告:

這道題的靈感來自fibonacci的那個兔子故事...思想是矩陣乘法解遞推數列(應該找不到什麼通項公式吧?反正我沒試過...)

根據題意建立這樣一種數列,數列從0號開始..代表第0個單位時間出生的小寵物...1代表在第1個單位時間出生的小寵物..以此類推..將這個數列某項稱作z[x]

顯然..當x>=5時..在第x天活著的小寵物數量sum[x] = z[x-5] + z[x-4] + z[x-3] +z[x-2] +z[x-1] + z[x]

再看根據題意 z[x] = z[x-2]/2*6 + z[x-3]/2*4 + z[x-4]/2*2 = z[x-2]*3 + z[x-3]*2 + z[x-4]

顯然這個式子是乙個遞推的公式...那麼就可以用矩陣乘法來求解這個遞推公式的第x項是多少...觀察數列建立關於這個遞推數列的"特徵「矩陣..

m = 0 1 0 0 0 0

0 0 1 0 0 0

0 0 0 1 00

0 0 0 0 1 0

0 0 0 0 0 1

0 0 1 2 3 0

而初始值為0單位時間的出生情況...可以自己遞推出來...為 a =

要求第x天出生了多少就用z[x] = a*(m^x)...矩陣乘法用遞迴2分來求解...

要求sum(x)...就分別求出z[x-5] ,z[x-4] ,z[x-3] ,z[x-2] ,z[x-1] ,z[x]再將這幾個值加起來就行了....

標程: #include#include#includeusing namespace std; struct matrix h,p,a; int m,t,ans,k; matrix mul(matrix a,matrix b) matrix mdata(int n) int main() printf("case %d: %d\n",++t,ans%10000); } return 0; }

隊內賽我出的一道題附標程 資料與解題報告

time limit 1000ms zzy領養了一對剛剛出生的不知名小寵物.巨萌巨可愛 小寵物的生命為5個單位時間並且不會在中間出意外翹辮子 如 從0出生能活到5但活不到6 小寵物經過2個單位時間成熟.剛剛成熟的一對小寵物能立即生育6只新的小寵物 如 從0出生的一對在2時成熟並進行第一次生育 小寵物...

一道模擬賽的題

這是乙個不錯的題啊,在這裡記錄一下 聽說不是原創題,那我就放上來了。應該沒有關係吧qaq 有乙個 n m 的地圖,地圖上的每乙個位置可以是空地,炮塔或是敵人.你需要操縱炮塔消滅敵人.對於每個炮塔都有乙個它可以瞄準的方向,你需要在它的瞄準方向上確定乙個它的攻擊位置,當然也可以不進行攻擊.一旦乙個位置被...

一道回滾莫隊的題 。

3.1 description 然而貪玩的dirty 又開始了他的第三個遊戲。dirty 抓來了n 只螞蟻,並且賦予每只螞蟻不同的編號,編號從1 到n。最開始,它們按某個 順序排成一列。現在dirty 想要進行m 場比賽,每場比賽給出l 和r 表示選出從左向右數第l 只至第r 只螞蟻。被選出的螞蟻需...