時間限制: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最多可以摘到多少個桃花。第一行...