結果

問題 No.3228 Very Large Fibonacci Sum
ユーザー daiota
提出日時 2025-08-09 04:39:28
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 1,360 bytes
コンパイル時間 1,674 ms
コンパイル使用メモリ 171,136 KB
実行使用メモリ 7,716 KB
最終ジャッジ日時 2025-08-09 04:39:31
合計ジャッジ時間 2,926 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 23
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<ll,ll> P;
#define REP(i,n) for(ll i=0;i<ll(n);i++)




const ll MOD=1000000007;


typedef vector<ll> vl;
typedef vector<vector<ll> > vvl;


vvl mul(vvl X, vvl Y) {
	vvl Z(X.size(),vl(Y[0].size()));
	REP(i,X.size()){
		REP(k,Y.size()){
			REP(j,Y[0].size()){
				Z[i][j]=(Z[i][j]+X[i][k]*Y[k][j])%MOD;
			}
		}
	}

	return Z;
}


vvl pow(vvl A,ll n){

	vvl B(A.size(),vl(A[0].size()));

	REP(i,B.size()) B[i][i]=1;

	while(n>0){

		if (n%2==1) B=mul(B,A);

		A=mul(A,A);
		n/=2;
	}

	return B;
}


ll modpow(ll x,ll n){
    ll res=1;
    while(n!=0LL){
	if(n%2!=0LL) res=(res*x)%MOD;
	x=(x*x)%MOD;
	n/=2;
   }
    return res;
}







int main(void){
	cin.tie(nullptr);  ios_base::sync_with_stdio(false);
	ll i,j;





	ll a,b,c,d,e,N;
	cin >> a >> b >> c >> d >> e >> N;



	vvl A(4,vl(4,0));


	A[0][0]=(c+1+MOD)%MOD;
	A[0][1]=(d-c+MOD)%MOD;
	A[0][2]=(-d+MOD)%MOD;
	A[0][3]=(e+MOD)%MOD;
	A[1][0]=1;
	A[2][1]=1;
	A[3][3]=1;


	ll k=(a+b+(b*c)%MOD+(a*d)%MOD+e+MOD)%MOD;

	if(N==0){
		cout << (a+MOD)%MOD << endl;
		return 0;
	}
	if(N==1){
		cout << (a+b+MOD)%MOD << endl;
		return 0;
	}
	if(N==2){
		cout << (k+MOD)%MOD << endl;
		return 0;
	}


	A=pow(A,N-2);



	ll x=(A[0][0]*k+A[0][1]*(a+b)+A[0][2]*a+A[0][3])%MOD;



	cout << (x+MOD)%MOD << endl;







	return 0;

}





0