牛客 牛客小白月賽6 J 洋灰三角

2021-08-25 02:25:42 字數 1520 閱讀 1981

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 262144k,其他語言524288k

64bit io format: %lld

題目描述 

洋灰是一種建築材料,常用來築橋搭建高層建築,又稱,水泥、混凝土。

whz有很多鑄造成三角形的洋灰塊,他想把這些洋灰三角按照一定的規律放到擺成一排的n個格仔裡,其中第i個格仔放入的洋灰三角數量是前乙個格仔的k倍再多p個,特殊地,第乙個格仔裡放1個。

whz想知道把這n個格仔鋪滿需要多少洋灰三角。

輸入描述:

第一行有3個正整數n,k,p。

輸出描述:

輸出一行,乙個正整數,表示按照要求鋪滿n個格仔需要多少洋灰三角,由於輸出資料過大,你只需要輸出答案模1000000007(1e9+7)後的結果即可。

備註:

對於100%的測試資料:

1 ≤ n ≤ 1000000000

1 ≤ k,p ≤ 1000

思路:容易知道公式第n個格仔所需三角個數 an=k*a(n-1)+p

a1        =    1

a2        =    k*a1+p

a3        =    k*a2+p

. . .

. . .

. . .

a(n-1)    =    k*a(n-2)+p

an         =    k*a(n-1)+p

每項相加得:前n項和 sn=k*s(n-1)+p*(n-1)+1,那麼就可以利用矩陣快速冪來求解

k p 1                  s(n-1)                      sn

0 1 1                  n-1                            n

mi(3,3)= 0 0 1  , b(3,1)=  1                  mi*b=   1

code :

#includeusing namespace std;

typedef long long ll;

struct matrix;

const ll mod=1e9+7;

ll n,a,b;

matrix mm;

matrix chengfa(matrix &m1,matrix &m2);

void matrix_power(void);

int main()

return 0;

}matrix chengfa(matrix &m1,matrix &m2)

return dd;

}void matrix_power(void)

mi.d[1][1]=a; mi.d[1][2]=b;

mi.d[1][3]=mi.d[2][2]=mi.d[2][3]=mi.d[3][3]=1;

while(n)

}

牛客小白月賽6 J 洋灰三角

題目 當n 1時,直接輸出1 當k 1時,fn是個等差數列,求和公式直接做 當k 2時,下面給出我的推導過程 涉及到高數裡面的求和過程,先對乙個數列求導,再求和,再積分 也可以先積分,再求和,再微分 倒數第三行就是先對原求和數列進行微分求和,再對求和結果進行積分 賦上 include include...

牛客小白月賽6 J 洋灰三角

題目鏈結 洋灰是一種建築材料,常用來築橋搭建高層建築,又稱,水泥 混凝土。whz有很多鑄造成三角形的洋灰塊,他想把這些洋灰三角按照一定的規律放到擺成一排的n個格仔裡,其中第i個格仔放入的洋灰三角數量是前乙個格仔的k倍再多p個,特殊地,第乙個格仔裡放1個。whz想知道把這n個格仔鋪滿需要多少洋灰三角。...

牛客小白月賽6

c 挑花 dfs或bfs 桃花一簇開無主,可愛深紅映淺紅。題百葉桃花 桃花長在桃樹上,樹的每個節點有乙個桃花,調皮的htbest想摘盡可能多的桃花。htbest有乙個魔法棒,摘到樹上任意一條鏈上的所有桃花,由於htbest法力有限,只能使用一次魔法棒,請求出htbest最多可以摘到多少個桃花。第一行...