矩陣快速冪 網易2017實習生程式設計題 魔力手環

2021-08-15 14:10:17 字數 1174 閱讀 7593

描述:

小易擁有乙個擁有魔力的手環上面有n個數字(構成乙個環),當這個魔力手環每次使用魔力的時候就會發生一種奇特的變化:每個數字會變成自己跟後面乙個數字的和(最後乙個數字的後面乙個數字是第乙個),一旦某個位置的數字大於等於100就馬上對100取模(比如某個位置變為103,就會自動變為3).現在給出這個魔力手環的構成,請你計算出使用k次魔力之後魔力手環的狀態。

輸入描述:

輸入資料報括兩行:

第一行為兩個整數n(2 ≤ n ≤ 50)和k(1 ≤ k ≤ 2000000000),以空格分隔

第二行為魔力手環初始的n個數,以空格分隔。範圍都在0至99.

輸出描述:

輸出魔力手環使用k次之後的狀態,以空格分隔,行末無空格。

輸入例子:

3 2

1 2 3

輸出例子:

8 9 7

分析:

由於題目中的求值非常有規律,數字成環,且當前數字等於當前數字加上後面的乙個數字,自然就可以聯想到構造矩陣,而且看到操作次數那麼大,肯定要麼找規律,要麼快速冪,然後我打表並沒有發現什麼規律,所以矩陣快速冪。

#include

using

namespace

std;

vector

> mul(vector

>a,vector

>b)

vector

> matrix_pow(vector

> matrix,int k)

return mm;

}int main()

num.push_back(t);

vector

> matrix(n,vector

(n,0));

for(int i=0;i1;

matrix[(i+1)%n][i]=1;

}vector

> mm = matrix_pow(matrix,k);

vector

> ans = mul(num,mm);

printf("%d",ans[0][0]);

for(int i=1;i0].size();i++)

printf(" %d",ans[0][i]);

puts("");

return

0;}

網易2016實習生程式設計題

有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。給定乙個整數陣列a,同時給定它的大小n和要找的k k在1到n之間 請返回第k大的數,保證答案存在。測試樣例 1,3,5,2,2 5,3返回 2 主體思路就是利用快速排序每次能將比某個哨兵小的數放在左側,大的數放在右側,如下 class f...

網易2017實習生程式設計題 消除重複元素

小易有乙個長度為n序列,小易想移除掉裡面的重複元素,但是小易想是對於每種元素保留最後出現的那個。小易遇到了困難,希望你來幫助他。輸入描述 輸入包括兩行 第一行為序列長度n 1 n 50 第二行為n個數sequence i 1 sequence i 1000 以空格分隔 輸出描述 輸出消除重複元素之後...

騰訊2017暑期實習生程式設計題

刷題 pragma warning disable 4996 遮蔽警告 構造回文 題目描述 給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。思路 其實就是,原字串翻轉之後的字串跟原字串的最長公共子串行 那麼利用動態規劃的最長公共...