AHOI2004 數字迷陣題解

2021-07-29 23:04:05 字數 1497 閱讀 1414

輸入輸出樣例

解決方案**

傳送門:

每行有三個正整數,分別是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語言...