結果
問題 | No.891 隣接3項間の漸化式 |
ユーザー |
![]() |
提出日時 | 2019-09-20 21:40:49 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,212 bytes |
コンパイル時間 | 1,143 ms |
コンパイル使用メモリ | 104,908 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-14 16:57:14 |
合計ジャッジ時間 | 2,221 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 39 |
ソースコード
#include <cstdio>#include <cstring>#include <iostream>#include <string>#include <cmath>#include <bitset>#include <vector>#include <map>#include <set>#include <queue>#include <deque>#include <algorithm>#include <complex>#include <unordered_map>#include <unordered_set>#include <random>#include <cassert>#include <fstream>#define popcount __builtin_popcountusing namespace std;typedef long long ll;typedef pair<int, int> P;const ll MOD=1e9+7;vector<vector<ll>> matrixmul(int l, int m, int n, vector<vector<ll>> a, vector<vector<ll>> b){vector<vector<ll>> c(l, vector<ll>(n));for(int i=0; i<l; i++){for(int j=0; j<n; j++){for(int k=0; k<m; k++){(c[i][j]+=a[i][k]*b[k][j])%=MOD;}}}return c;}vector<vector<ll>> matrixpow(int n, vector<vector<ll>> a, ll k){vector<vector<ll>> ap=a, ans(n, vector<ll>(n));for(int i=0; i<n; i++) ans[i][i]=1;while(k){if(k&1) ans=matrixmul(n, n, n, ap, ans);ap=matrixmul(n, n, n, ap, ap);k>>=1;}return ans;}int main(){ll a, b, n;cin>>a>>b>>n;vector<vector<ll>> mat(2, vector<ll>(2));mat[0][1]=1, mat[1][0]=b, mat[1][1]=a;vector<vector<ll>> matp=matrixpow(2, mat, n);cout<<matp[0][1]<<endl;return 0;}