求解SJTU OJ 1022 過程中的收穫

2021-08-15 07:18:47 字數 1362 閱讀 1534

由fibonacci數列遞推式,設數列中連續兩項a=f(i+1),b=f(i),由a,b得到遞推到下兩項(a』,b』)的式子為a』=a+b,b』=a,如果把(a,b)看作二維向量,則遞推過程等價於乘上乙個二階向量

1 1

1 0

該矩陣同時是

f(2) f(1)

f(1) f(0)

由分塊矩陣的乘積可以得到fibonacci數列的矩陣表示

(來自poj)

這樣一來,求fibonacci數列第n項轉化為求n次冪的問題

利用位移運算子求底數的n次冪,將時間複雜度由普通的o(n)減小到o(log2(n))

思路:按照指數的二進位制表示迴圈求冪;

int quick_pow(int a, int b)

return ans;

}

description

定義fib數列:1,1,2,3,5,8,13,…

求第n項除以2010的餘數

input format

輸入僅一行,為乙個整數n

output format

輸出僅一行,為第n項除以2010的餘數

sample input

3 sample output

2 limits:

對於70%的資料 n≤1,000,000

對於100%的資料 n≤210,000,000,000

#include 

#include

using namespace std;

class matrix2

matrix2(const matrix2& obj)

matrix2& operator%= (int a);

int fetch(int a, int b);

};matrix2 operator* (const matrix2& obj1, const matrix2& obj2)

return tmp;

}matrix2& matrix2::operator%= (int a)

int matrix2::fetch(int a, int b)

int fib_mod(long

long power, int mod)

base = base * base;

base %= mod;

power >>= 1;

}return (ans.fetch(0,1));

}int main()

面試過程中

面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重要依據。對應聘者而言,了解這些問題背後的 貓膩 至關重要。本文對面試中經常出現的一些典型問題進行了整理,並給出相應的回答思路和參 讀者無需過分關注分析的細節,關鍵是要從這些分析中 悟 出面試的規律及回答問題的思維方式,達到...

儲存過程中呼叫儲存過程

use northwind go 儲存過程1 功能 通過員工firstname inputempfirstname 獲得 員工id outid if exists select name from sysobjects where name p getempleeidbyname and type ...

儲存過程中事務操作

資料庫中事務主要應用在多條語句的更新操作 插入 修改 刪除 可以保證資料的完整性與正確性。使用原則為盡可能少的影響資料,以免產生死鎖或者占用資源。在儲存過程中如果中間操作有非嚴重的錯誤資訊執行不會中斷,會繼續執行並返回相應結果。但是程式呼叫的話如果不是用 try catch形式則會報錯,出現黃頁。需...