description
input
一行三個整數b, d, n。
output
一行乙個數表示模7528443412579576937 之後的結果。
sample input
輸入1:sample output1 5 9
輸入2:
11 125 6715504
輸出1:data constraint76輸出2:
1499928102740042526
好吧。一直沒看懂題目名到底有意義在哪= =
進入正題
首先我們發現(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...