題目提供者nodgd
標籤倍增遞推矩陣洛谷原創
難度提高+/省選-
提交該題 討論
題解記錄
nodgd是乙個喜歡寫程式的同學,前不久洛谷oj橫空出世,nodgd同學當然第一時間來到洛谷oj刷題。於是發生了一系列有趣的事情,他就打算用這些事情來出題噁心大家……洛谷oj當然算是好地方,nodgd同學打算和朋友分享一下。於是他就拉上了他的朋友ciocio和nicole兩位同學一起刷題。喜歡比賽的他們當然不放過這樣一次刷題比賽的機會!
在第1天nodgd,coicoi,nicole都只做了1道題。
在第2天nodgd,coicoi,nicole都只做了3道題。
他們都有著嚴格的刷題規則,並且會在每一天都很遵守規則的刷一定量的題。
(1)nodgd同學第k+2天刷題數量a[k+2]=p*a[k+1]+q*a[k]+b[k+1]+c[k+1]+r*k^2+t*k+1;
(2)ciocio同學第k+2天刷題數量b[k+2]=u*b[k+1]+v*b[k]+a[k+1]+c[k+1]+w^k;
(3)nicole同學第k+2天刷題數量c[k+2]=x*c[k+1]+y*c[k]+a[k+1]+b[k+1]+z^k+k+2;
(以上的字母p,q,r,t,u,v,w,x,y,z都是給定的常數,並保證是正整數)
於是他們開始了長時間的刷題比賽!一共進行了n天(4<=n<=10^16)
但是時間是可貴的,nodgd想快速知道第n天每個人的刷題數量。不過nodgd同學還有大量的數學競賽題、物理競賽題、英語競賽題、美術競賽題、體育競賽題……要做,就拜託你來幫他算算了。
由於結果很大,輸出結果mod k的值即可。
輸入格式:
第一行兩個正整數n,k。(4<=n<=10^16,2<=k<=10^16)
第二行四個正整數p,q,r,t。
第三行三個正整數u,v,w。
第四行三個正整數x,y,z。
(保證p,q,r,t,u,v,w,x,y,z都是不超過100的正整數)
輸出格式:
共三行,每行乙個名字+乙個空格+乙個整數。依次是nodgd,ciocio,nicole和他們在第n天刷題數量mod k的值。
輸入樣例#1:
4 100072 1 1 1
2 2 3
1 1 2
輸出樣例#1:
nodgd 74ciocio 80
nicole 59
矩陣乘法。
注意,中間相乘過程可能會比64位長整型的資料範圍還要大。
看到資料範圍很大,之後異想天開,以為一定會答案迴圈,再加上快速冪,最多也只是50分。
#include#include#define ll long long
using
namespace
std;
const
int n=2e5+100
;ll n,mod;
ll a[n]=;
ll b[n]=;
ll c[n]=;
ll kpow(ll a,ll p)
intmain()
if(n==1)
if(n==2)
for(ll i=3;i<=n;i++)
if(b[i]==b[2]&&b[i-1]==b[1])
if(c[i]==c[2]&&c[i-1]==c[1])
if(fa&&fb&&fc) break
; }
if(fa&&fb&&fc)
else
return0;
}
看到標籤,「矩陣乘法」,去網上看了看矩陣乘法
附上ac**:
#include#include#include
#define ll long long
using
namespace
std;
ll n,mod,p,q,r,t,u,v,w,x,y,z;
ll f[
12][12],a[12][12
];ll slow_mul(ll a,ll b)
a<<=1;a%=mod;b>>=1
; }
return
ans;
}void mul(ll a[12][12],ll b[12][12
])int
main()
cout
<<"
nodgd
"<<"
"<1][1]
<<"
ciocio
"<<"
"<1][3]
<<"
nicole
"<<"
"<1][5]
}
13 P1707 刷題比賽
題目 luogu 我還沒怎麼見過直接說要用什麼演算法的題呢 矩陣乘法,矩陣快速冪什麼的不再多說,上oi wiki link 放幾道練習題 循序漸進 按照慣例,推轉移矩陣。三個式子前面的 pak 1 pa pa k 1 這種都比較容易分解,因為式子已經在題目裡了,其餘的項難分解的基本如下兩種 然後就可...
leetcode刷題 棒球比賽
你現在是棒球比賽記錄員。給定乙個字串列表,每個字串可以是以下四種型別之一 1.整數 一輪的得分 直接表示您在本輪中獲得的積分數。2.一輪的得分 表示本輪獲得的得分是前兩輪有效 回合得分的總和。3.d 一輪的得分 表示本輪獲得的得分是前一輪有效 回合得分的兩倍。4.c 乙個操作,這不是乙個回合的分數 ...
LeetCode刷題(棧) 682 棒球比賽
你現在是一場採用特殊賽制棒球比賽的記錄員。這場比賽由若干回合組成,過去幾回合的得分可能會影響以後幾回合的得分。比賽開始時,記錄是空白的。你會得到乙個記錄操作的字串列表 ops,其中 ops i 是你需要記錄的第 i 項操作,ops 遵循下述規則 整數 x 表示本回合新獲得分數 x 表示本回合新獲得的...