結果
問題 | No.891 隣接3項間の漸化式 |
ユーザー |
![]() |
提出日時 | 2019-09-20 21:59:04 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,252 bytes |
コンパイル時間 | 1,438 ms |
コンパイル使用メモリ | 164,972 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-14 17:29:43 |
合計ジャッジ時間 | 2,670 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 39 |
ソースコード
#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<ll, ll> P;#define fi first#define se second#define repl(i,a,b) for(ll i=(ll)(a);i<(ll)(b);i++)#define rep(i,n) repl(i,0,n)#define all(x) (x).begin(),(x).end()#define dbg(x) cout<<#x"="<<x<<endl#define mmax(x,y) (x>y?x:y)#define mmin(x,y) (x<y?x:y)#define maxch(x,y) x=mmax(x,y)#define minch(x,y) x=mmin(x,y)#define uni(x) x.erase(unique(all(x)),x.end())#define exist(x,y) (find(all(x),y)!=x.end())#define bcnt __builtin_popcountll#define INF 1e16#define mod 1000000007typedef vector<ll> vec;typedef vector<vec> mat;mat operator*(const mat& a,const mat& b){ll n=a.size();mat res(n,vec(n,0));rep(i,n)rep(j,n)rep(k,n)(res[i][j]+=(a[i][k]*b[k][j]%mod))%=mod;return res;}mat mod_pow(mat a,ll n){ll m=a.size();mat res(m,vec(m,0));rep(i,m)res[i][i]=1;while(n>0){if(n&1)res=a*res;a=a*a;n>>=1;}return res;}int main(){cin.tie(0);ios::sync_with_stdio(false);ll a,b,n;cin>>a>>b>>n;if(n==0){cout<<0<<endl;return 0;}mat A(2,vec(2,0));A[0][0]=a; A[0][1]=b;A[1][0]=1; A[1][1]=0;mat B=mod_pow(A,n-1);cout<<B[0][0]<<endl;return 0;}