輸入輸出樣例
解決方案**
傳送門:
每行有三個正整數,分別是i,j,m,其中i,j<=10^9,2<=m<=10^4。
每行輸出對應的第i行,第j列的那個正整數對m取模的結果。
1 2 99
9 1 999
首先我們可以判斷出每行都是變形的斐波那契數列,又因為a[
i][2
]=2a
[i][
1]−(
i−1)
,所以本質上a[
i][j
] 只與第i行的第乙個元素有關,那麼關鍵求a[
i][1
] 我們發現第一列增加的值為2或3,其實我們可以發現第一次(第二行)+3,後面兩次(3,4行)分別+2-3,再後面的3次是前兩次的序列和,即3-2-3……
每一次往後推的項數滿足斐波那契數列,且就是前面兩次的那些項連起來.即第一列通項為f[
i]=⌊
i×t+
t−1⌋
,其中t=
5√+1
2 所以我們可以用o(1)的時間求a[
i][1
] ,但是需要o(n)的時間求a[
i][j
] ,那麼我們可以令f[
0]=1
,f[1
]=1,
a=1,
b=1 ,則m=
5√+1
2 ,k=
1−5√
2 ,f[
n]=k
n×(1
−m)−
mn×(
1−k)
k−m
即f[n]=m
n+1−
kn+1
5√;其實就是斐波那契數列通項公式
其他行就是初值不一樣而已,**不想寫注釋,自己都覺得奇醜無比……
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
int n,m,p;
int x[101][3][3],y[3][3],z[3][3],a[101],k1,k2,ans;
int i,j,k,l;
int main()
y[1][1]=y[2][2]=1;
for(i--;i>=0;i--) }}
k1=((ll)(n*(1+sqrt(5))/2+n-1))%p;
k2=((2*k1-n+1)%p+p)%p;
ans=((ll)k1*y[1][1]+(ll)k2*y[1][2])%p;
printf("%d\n",ans);
return
0;}
AHOI2004 數字迷陣
瞪眼觀察題。發現行列都跟斐波那契數列有關。如果能求出第一列就好了。發現第一列的數都是由若干個 2 和若干 3 的和加 1 發現第 fib i 行有 fib i 2 個3和 fib i 3 個2。其他行呢?將行號拆分成若干項斐波那契數列的和,發現對應的 3 2 的數目也是對應的和。然後萬事大吉了。距離...
DP 探索數字迷塔
晶晶最近迷上了數字迷宮遊戲,整天沉浸在一串串看似簡單的數字中自得其樂。數字迷宮遊戲的魅力體現在變化中隱含著不變的規律,歸納是 數字迷宮的法寶之一。圖10.1 1就是乙個由線連線起來的數字小方格組成的數字迷塔。這個迷塔共n層,它由n n 1 2個小方格組成。每個小方格中都有乙個數字,並且連著下一層的兩...
數字迷宮小遊戲
本案例為實現動態的重新整理dos 介面,使用使用者控制頭像 消滅 視窗中出現的數字 無固定順序 的遊戲,來使學員加深對一維陣列 二維陣列 迴圈語句 選擇程式設計以及相關系統函式的使用。a 選擇程式設計 b 迴圈程式設計 c 使用者 螢幕視窗的輸入輸出 d 相關系統函式 e 一維 二維陣列 4天c語言...