結果
問題 | No.147 試験監督(2) |
ユーザー | ciel |
提出日時 | 2015-02-09 17:03:08 |
言語 | C++11 (gcc 11.4.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 868 bytes |
コンパイル時間 | 812 ms |
コンパイル使用メモリ | 72,152 KB |
実行使用メモリ | 16,960 KB |
最終ジャッジ日時 | 2024-06-23 16:24:21 |
合計ジャッジ時間 | 7,459 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | TLE | - |
testcase_01 | -- | - |
testcase_02 | -- | - |
testcase_03 | -- | - |
ソースコード
#include <iostream> #include <valarray> #include <cstdio> using namespace std; typedef long long val_t; typedef valarray<val_t>V; const int MOD=1000000007; V z(4); V &Me(const V &_x,const V &_y){ int i=0,j; for(;i<2;i++)for(j=0;j<2;j++)z[i*2+j]=(_x[slice(i*2,2,1)]*_y[slice(j,2,2)]).sum()%MOD; return z; } V &Mx(const V &_x){ int i=0,j; for(;i<2;i++)for(j=0;j<2;j++)z[i*2+j]=(_x[slice(i*2,2,1)]*_x[slice(j,2,2)]).sum()%MOD; return z; } val_t pow_binary_mod(val_t x,val_t y){ val_t z=1; for(;y;y>>=1){ if(y&1)z=z*x%MOD; x=x*x%MOD; } return z; } int main(){ int T; val_t r=1; for(cin>>T;T--;){ val_t c,d; cin>>c>>d; if(d>MOD-1)d%=MOD-1; val_t fib; { V x(4);x[0]=x[1]=x[2]=1; V e(4);e[0]=e[3]=1; for(c-=1;c;c>>=1){ if(c&1)e=Me(e,x); x=Mx(x); } fib=e.sum()%MOD; } r=r*pow_binary_mod(fib,d)%MOD; } cout<<r<<endl; }