魔力手環(huán)

問題描述

小易擁有一個擁有魔力的手環(huán)上面有n個數(shù)字(構(gòu)成一個環(huán)),當這個魔力手環(huán)每次使用魔力的時候就會發(fā)生一種奇特的變化:每個數(shù)字會變成自己跟后面一個數(shù)字的和(最后一個數(shù)字的后面一個數(shù)字是第一個),一旦某個位置的數(shù)字大于等于100就馬上對100取模(比如某個位置變?yōu)?03,就會自動變?yōu)?).現(xiàn)在給出這個魔力手環(huán)的構(gòu)成澳腹,請你計算出使用k次魔力之后魔力手環(huán)的狀態(tài)。

輸入描述

輸入數(shù)據(jù)包括兩行:
第一行為兩個整數(shù)n(2 ≤ n ≤ 50)和k(1 ≤ k ≤ 2000000000),以空格分隔
第二行為魔力手環(huán)初始的n個數(shù)杨何,以空格分隔酱塔。范圍都在0至99.

輸出描述

輸出魔力手環(huán)使用k次之后的狀態(tài),以空格分隔晚吞,行末無空格延旧。

輸入例子

3 2
1 2 3

輸出例子

8 9 7

分析

可以構(gòu)造一個n*n的矩陣M。把當前狀態(tài)看成一個向量槽地,那么下一個狀態(tài)向量就是當前向量乘以矩陣的結(jié)果迁沫。假設(shè)初始狀態(tài)列向量(n*1)為v,那么最終的狀態(tài)向量等于M*M*...M*v = M^k * v(k為狀態(tài)變換的次數(shù)).于是問題轉(zhuǎn)換為如何快速求解矩陣的冪捌蚊。我們可以用二分法快速求解矩陣的冪集畅,計算復雜度為logn。

note

  1. 矩陣可以方便地描述向量數(shù)據(jù)的變化
  2. 二分法可以把問題的復雜度將至logn

代碼

#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> mult(const vector<vector<int>> &m, const vector<int> &v)
{
    int n = v.size();
    vector<int> product(n, 0);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            product[i] = (product[i] + m[i][j] * v[j]) % 100;
        }
    }
    return product;
}

vector<vector<int>> mult(const vector<vector<int>> &lhs, const vector<vector<int>> &rhs)
{
    int n = lhs.size();
    vector<vector<int>> product(n, vector<int>(n, 0));
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            for (int k = 0; k < n; k++)
            {
                product[i][j] = (product[i][j] + lhs[i][k] * rhs[k][j]) % 100;
            }
        }
    }
    return product;
}

vector<vector<int>> power(const vector<vector<int>> &m, int p)
{
    if (p <= 1)
        return m;

    vector<vector<int>> h = power(m, p / 2);

    if (p % 2 == 0)
        return mult(h, h);
    return mult(m, mult(h, h));
}

int main()
{
    int n, k;
    scanf("%d%d", &n, &k);
    vector<int> v(n);
    for (int i = 0; i < n; i++)
        scanf("%d", &v[i]);

    vector<vector<int>> m(n, vector<int>(n, 0));
    for (int i = 0; i < n; i++)
    {
        m[i][i] = m[i][(i + 1) % n] = 1;
    }

    m = power(m, k);
    vector<int> ret = mult(m, v);

    printf("%d", ret[0]);
    for (int i = 1; i < n; i++)
        printf(" %d", ret[i]);

    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缅糟,一起剝皮案震驚了整個濱河市挺智,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窗宦,老刑警劉巖赦颇,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件二鳄,死亡現(xiàn)場離奇詭異,居然都是意外死亡媒怯,警方通過查閱死者的電腦和手機订讼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扇苞,“玉大人欺殿,你說我怎么就攤上這事”罘螅” “怎么了脖苏?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長定踱。 經(jīng)常有香客問我棍潘,道長,這世上最難降的妖魔是什么屋吨? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任蜒谤,我火速辦了婚禮,結(jié)果婚禮上至扰,老公的妹妹穿的比我還像新娘鳍徽。我一直安慰自己,他們只是感情好敢课,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布阶祭。 她就那樣靜靜地躺著,像睡著了一般直秆。 火紅的嫁衣襯著肌膚如雪濒募。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天圾结,我揣著相機與錄音瑰剃,去河邊找鬼。 笑死筝野,一個胖子當著我的面吹牛晌姚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播歇竟,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼挥唠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了焕议?” 一聲冷哼從身側(cè)響起宝磨,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后唤锉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體世囊,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年窿祥,在試婚紗的時候發(fā)現(xiàn)自己被綠了茸习。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡壁肋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出籽慢,到底是詐尸還是另有隱情浸遗,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布箱亿,位于F島的核電站跛锌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏届惋。R本人自食惡果不足惜髓帽,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脑豹。 院中可真熱鬧郑藏,春花似錦、人聲如沸瘩欺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俱饿。三九已至歌粥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拍埠,已是汗流浹背失驶。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枣购,地道東北人嬉探。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像坷虑,于是被迫代替她去往敵國和親甲馋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容