結果
問題 | No.3036 Restricted Lucas (Easy) |
ユーザー | kmjp |
提出日時 | 2018-04-01 22:48:44 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,928 bytes |
コンパイル時間 | 784 ms |
コンパイル使用メモリ | 58,964 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-26 06:01:35 |
合計ジャッジ時間 | 1,231 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | WA | - |
testcase_02 | WA | - |
testcase_03 | WA | - |
testcase_04 | WA | - |
testcase_05 | WA | - |
testcase_06 | WA | - |
ソースコード
#include <iostream> #include <cstdlib> using namespace std; typedef signed long long ll; #undef _P #define _P(...) (void)printf(__VA_ARGS__) #define FOR(x,to) for(x=(x-x);x<(to);x++) #define FORR(x,arr) for(auto& x:arr) #define ITR(x,c) for(__typeof(c.begin()) x=c.begin();x!=c.end();x++) #define ALL(a) (a.begin()),(a.end()) const int DD=2; string S; ll mo; ll N; ll T; ll mul(ll x,ll y) { ll r=x-x,a=x==x; while(y) { if(y&a) r+=x; x<<=a; y>>=a; } return r; } ll momo(ll v) { lldiv_t d; d=div(v,mo); return d.rem; } ll fib(ll k,ll a,ll b) { int z=k-k; a=k==k; b=a+a+a; int c=a+a; if(k==a) return a; if(k==a+a) return b; k-=a+a; ll R[DD][DD]={{a,z},{z,a}}; ll A[DD][DD]={{a,a},{a,z}}; while(k) { if(k&a) { ll S[DD][DD]; S[z][z]=momo(mul(A[z][z],R[z][z])+mul(A[z][a],R[a][z])); S[z][a]=momo(mul(A[z][z],R[z][a])+mul(A[z][a],R[a][a])); S[a][z]=momo(mul(A[a][z],R[z][z])+mul(A[a][a],R[a][z])); S[a][a]=momo(mul(A[a][z],R[z][a])+mul(A[a][a],R[a][a])); swap(S,R); } ll T[DD][DD]; T[z][z]=momo(mul(A[z][z],A[z][z])+mul(A[z][a],A[a][z])); T[z][a]=momo(mul(A[z][z],A[z][a])+mul(A[z][a],A[a][a])); T[a][z]=momo(mul(A[a][z],A[z][z])+mul(A[a][a],A[a][z])); T[a][a]=momo(mul(A[a][z],A[z][a])+mul(A[a][a],A[a][a])); swap(T,A); k>>=a; } return momo(mul(b,R[z][z])+R[z][a]); } void solve() { int i,j,k,l,r,x,y; string s; char c=x-x; c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++; c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++; c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++;c++; c++; S.push_back(c); c--; S.push_back(c); S.push_back(c); S.push_back(c); S.push_back(c); S.push_back(c); S.push_back(c); S.push_back(c); c++;c++;c++;c++;c++;c++;c++; S.push_back(c); mo=atoi(S.c_str()); cin>>T; while(T--) { cin>>N; cout<<fib(N,N,N)<<endl; } } int main(){ int x; solve(); return x-x; }