JLOI2015 有意義的字串

2021-09-24 18:42:38 字數 1346 閱讀 2560

description

input

一行三個整數b, d, n。

output

一行乙個數表示模7528443412579576937 之後的結果。

sample input

輸入1:

1 5 9

輸入2:

11 125 6715504

sample output

輸出1:

76輸出2:

1499928102740042526

data constraint

好吧。一直沒看懂題目名到底有意義在哪= =

進入正題

首先我們發現(b+sqrt(d))/2可以是某個方程的解,它符合(-b+sqrt(b*b-4ac))/2a的形式。

我們發現這個方程是x^2=bx+(d-b^2)/4;

我們假設乙個數列f[n]=((b+sqrt(d))/2)^n;

由剛才的方程可得f[n]滿足f[n]=bf[n-1]+(d-b^2)/4*f[n-2]

所以對於((b+sqrt(d))/2的n次方我們可以矩乘快速冪求得。

但實數直接上mod是會掛的!

我們接著發現方程另外一根為((b-sqrt(d))/2;

那麼它同樣滿足上面的遞推式

我們設h[n]=((b+sqrt(d))/2)^n+((b+sqrt(d))/2)^n,那麼h[n]同樣滿足遞推式,而且h[n]是整數!!!

又因為((b+sqrt(d)/2)^n絕對值小於1,所以它的影響我們可以直接特判,

就這樣,

另外,由於mod的數太大,乘法我們要用快速乘實現

#include#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;struct

matrixdw,dl,y;

ll mo=7528443412579576937ll;

ll ans,n,b,d;

ll add(ll a,ll b)

ll mul(ll a,ll b)

returnl;}

matrix

operator *(matrix a,matrix b)

returnc;}

matrix mi(matrix x,ll z)

returnl;}

intmain()

printf(

"%lld\n

",ans);

}

JLOI2015 有意義的字串

description input 一行三個整數b,d,n。output 一行乙個數表示模7528443412579576937 之後的結果。sample input 輸入1 1 5 9 輸入2 11 125 6715504 sample output 輸出1 76輸出2 1499928102740...

有意思的字串拘留實驗

本次字串拘留實驗分為4個,最終根據實驗得出了乙個很有意思的結論。這些結論使兄弟們在以前關於字串操作的結論基礎上進行深入理解。關於字串拘留池,請google一下string intern pool,你可以搜尋到不少東西的。1 在main中沒有出現硬字串 string a1 new string a 1...

C語言 字串前加L的意義 如 L「A」

unicode或者寬字元都沒有改變char資料型態在c中的含義。char繼續表示1個位元組的儲存空間,sizeof char 繼續返回1。理論上,c中1個位元組可比8位長,但對我們大多數人來說,1個位元組 也就是1個char 是8位寬。c中的寬字元基於wchar t資料型態,它在幾個表頭檔案包括wc...