結果
問題 | No.658 テトラナッチ数列 Hard |
ユーザー | ttttan |
提出日時 | 2019-01-20 01:29:43 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 1,363 ms / 2,000 ms |
コード長 | 1,224 bytes |
コンパイル時間 | 1,885 ms |
コンパイル使用メモリ | 170,800 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-18 14:59:43 |
合計ジャッジ時間 | 8,178 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 5 ms
5,376 KB |
testcase_04 | AC | 468 ms
5,376 KB |
testcase_05 | AC | 534 ms
5,376 KB |
testcase_06 | AC | 695 ms
5,376 KB |
testcase_07 | AC | 735 ms
5,376 KB |
testcase_08 | AC | 871 ms
5,376 KB |
testcase_09 | AC | 1,360 ms
5,376 KB |
testcase_10 | AC | 1,363 ms
6,944 KB |
ソースコード
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll mod=17; vector<vector<ll>> seki(vector<vector<ll>> a,vector<vector<ll>> b){ vector<vector<ll>> ret; ll s=a.size(),t=b[0].size(); for(ll i=0;i<s;i++){ vector<ll> c; for(ll j=0;j<t;j++){ ll sum=0; for(ll k=0;k<a[0].size();k++){ sum+=a[i][k]*b[k][j]; sum%=mod; } c.push_back(sum); } ret.push_back(c); } return ret; } vector<vector<ll>> kai(vector<vector<ll>> a,ll n){ vector<vector<ll>> ret=a; vector<vector<ll>> now=a; for(ll i=0;i<a.size();i++){ for(ll j=0;j<a.size();j++){ if(i==j)ret[i][j]=1; else ret[i][j]=0; } } while(n>0){ if(n%2==1){ ret=seki(ret,now); } now=seki(now,now); n/=2; } return ret; } int main(){ ll q;cin>>q; vector<vector<ll>> t={{1,1,1,1},{1,0,0,0},{0,1,0,0},{0,0,1,0}}; for(ll i=0;i<q;i++){ ll n;cin>>n; if(n<=3)cout<<0<<endl; else if(n==4)cout<<1<<endl; else{ vector<vector<ll>> now=kai(t,n-4); cout<<now[0][0]%mod<<endl; } } }