P1707 刷題比賽

2022-05-03 11:54:21 字數 2463 閱讀 6610

題目提供者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 10007

2 1 1 1

2 2 3

1 1 2

輸出樣例#1:

nodgd 74

ciocio 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 表示本回合新獲得的...