結果
| 問題 | No.534 フィボナッチフィボナッチ数 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2025-12-21 11:16:30 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,100 bytes |
| 記録 | |
| コンパイル時間 | 1,403 ms |
| コンパイル使用メモリ | 171,000 KB |
| 実行使用メモリ | 7,852 KB |
| 最終ジャッジ日時 | 2025-12-21 11:16:33 |
| 合計ジャッジ時間 | 2,918 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 WA * 10 |
ソースコード
#include<bits/stdc++.h>
#define int long long
using namespace std;
int mod;
namespace Matrix{
typedef vector<vector<int> > Mat;
Mat init(int n,int c){return Mat(n,vector<int>(n,c));}
void print(Mat a){
cerr<<"---------------------------\n";
for(auto x:a){
for(auto y:x)cerr<<y<<" ";
cerr<<"\n";
}
cerr<<"---------------------------\n";
return;
}
Mat operator * (Mat a,Mat b){
assert(a.size()==b.size());
int n=a.size();
Mat z=init(n,0);
for(int k=0;k<n;k++)for(int i=0;i<n;i++)for(int j=0;j<n;j++)z[i][j]=(z[i][j]+a[i][k]*b[k][j])%mod;
return z;
}
Mat operator ^ (Mat a,int b){
int n=a.size();
Mat z=init(n,0);
for(int i=0;i<n;i++)z[i][i]=1;
while(b){
if(b&1)z=z*a;
a=a*a;
b>>=1;
}
return z;
}
}
using namespace Matrix;
int n;
int calc(int n){
if(n==0)return 0;
if(n==1)return 1;
Mat a=init(2,0),b=init(2,0);
a[0][0]=a[0][1]=a[1][0]=1;
b[0][0]=1;
a=a^(n-1);
a=a*b;
return a[0][0];
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
mod=1e9+8;
n=calc(n);
mod=1e9+7;
cout<<calc(n)<<"\n";
return 0;
}
/*
*/
vjudge1