hdu6395 分塊矩陣快速冪

2022-06-02 04:00:21 字數 1183 閱讀 4836

題目大意:

f(1)=a, f(2)=b,  f(i)=c*f(i-2)+d*f(i-1)+p/i(向下取整)

給定a b c d p n

求f(n)

構造矩陣a    *    矩陣b        =          矩陣c

┌ f(n-2) f(n-1) 1  ┐    ┌ 0   c  0  ┐        ┌ f(n-1) f(n)   1   ┐

|      0  0   0    | *   |  1   d  0  |   =    |      0  0   0    |

└  0     0   0 ┘    └ 0  p/i 1 ┘  └  0     0   0 ┘

那麼當a為第一項時  a*(b^n)=第n項

因為p/i向下取整所以在 1~n的範圍中 p/i的數值是多段相等的

如n=10 p=15 那麼1~n中 p/i為 15 7 5 3 3 2 2 1 1 1

改變b中的p/i 分別求b^len 即 b^1 b^1 b^1 b^2 b^2 b^3

已知 p / i = x 那麼len = min( p / ( p / i ) , n )  都是int型向下取整 

就得到了分塊的 b^n 

#include using

namespace

std;

#define inf 0x3f3f3f3f

#define llinf 0x3f3f3f3f3f3f3f3f3f

#define ll long long

#define mem(i,j) memset(i,j,sizeof(i))

const

int n=3

;const

int mod=1e9+7

;ll a,b,c,d,p,n;

struct

mat

mat

operator*(mat p)

}ans,pow;

mat mod_pow(mat a,

intx)

return

res;

}int

main()

printf(

"%lld\n

",ans.a[0][1

]); }

return0;

}

view code

hdu 6395 (整除分塊 矩陣快速冪)

該題的表示式是 fn fn 1 1 3dc pn 1 0000 1 fn 1 fn 2 1 left begin f n f 1 end right left begin3 d c frac 1 0 0 0 0 1 end right left begin f f 1 end right fn fn...

HDU 6395 區間矩陣快速冪

hdu 6395 傳送門 題目裡有公式顯示不了,直接傳送門 公式 f1 a f2 b fn fn 2 c fn 1 d p n 其中 a b c d p n 均為不定值,p n 為計算機整數除法,即向下取整 很明顯的是 前 2 項 c 前 1 項 d,所以矩陣很好構造 mat d 1 c 0所以 f...

hdu 6395 Sequence 分塊矩陣快速冪

容易知道 p i i 3.n 在某一區間內是相同的,記錄前乙個區間的fn 1,fn 2,對本區間進行矩陣快速冪,確定本區間的界限可以用一句話 即 j p i 0?n min n,p p i 並不需要二分 ac include include include include include inclu...