結果
問題 | No.2883 K-powered Sum of Fibonacci |
ユーザー | karinohito |
提出日時 | 2024-09-08 14:22:30 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 5 ms / 3,000 ms |
コード長 | 2,009 bytes |
コンパイル時間 | 3,935 ms |
コンパイル使用メモリ | 246,832 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-08 14:22:36 |
合計ジャッジ時間 | 5,284 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,812 KB |
testcase_01 | AC | 2 ms
6,944 KB |
testcase_02 | AC | 2 ms
6,940 KB |
testcase_03 | AC | 2 ms
6,944 KB |
testcase_04 | AC | 2 ms
6,944 KB |
testcase_05 | AC | 2 ms
6,944 KB |
testcase_06 | AC | 2 ms
6,944 KB |
testcase_07 | AC | 3 ms
6,944 KB |
testcase_08 | AC | 3 ms
6,940 KB |
testcase_09 | AC | 3 ms
6,940 KB |
testcase_10 | AC | 3 ms
6,944 KB |
testcase_11 | AC | 5 ms
6,940 KB |
testcase_12 | AC | 3 ms
6,944 KB |
testcase_13 | AC | 2 ms
6,940 KB |
testcase_14 | AC | 5 ms
6,940 KB |
testcase_15 | AC | 4 ms
6,940 KB |
testcase_16 | AC | 2 ms
6,940 KB |
testcase_17 | AC | 3 ms
6,944 KB |
testcase_18 | AC | 2 ms
6,940 KB |
testcase_19 | AC | 4 ms
6,940 KB |
testcase_20 | AC | 4 ms
6,940 KB |
testcase_21 | AC | 4 ms
6,944 KB |
testcase_22 | AC | 5 ms
6,944 KB |
testcase_23 | AC | 5 ms
6,944 KB |
testcase_24 | AC | 5 ms
6,940 KB |
testcase_25 | AC | 4 ms
6,944 KB |
testcase_26 | AC | 4 ms
6,944 KB |
testcase_27 | AC | 5 ms
6,944 KB |
testcase_28 | AC | 5 ms
6,940 KB |
testcase_29 | AC | 4 ms
6,940 KB |
testcase_30 | AC | 2 ms
6,944 KB |
testcase_31 | AC | 2 ms
6,940 KB |
testcase_32 | AC | 2 ms
6,944 KB |
testcase_33 | AC | 2 ms
6,940 KB |
testcase_34 | AC | 2 ms
6,940 KB |
testcase_35 | AC | 2 ms
6,940 KB |
testcase_36 | AC | 2 ms
6,940 KB |
testcase_37 | AC | 2 ms
6,944 KB |
testcase_38 | AC | 2 ms
6,940 KB |
testcase_39 | AC | 2 ms
6,940 KB |
testcase_40 | AC | 2 ms
6,944 KB |
testcase_41 | AC | 2 ms
6,944 KB |
testcase_42 | AC | 4 ms
6,940 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; #include<atcoder/modint> #include<atcoder/convolution> using namespace atcoder; using mint = atcoder::modint998244353; using vm=vector<mint>; vm Berlekamp_Massey(const vm &a) { int n = a.size(); vm c={-1}, c2={0}; mint r2 = 1; int i2 = -1; for(int i = 0; i < n; i++) { mint r = 0; int d = c.size(); for(int j = 0; j < d; j++) r += c[j] * a[i - j]; if(r == 0) continue; mint coef = -r / r2; int d2 = c2.size(); if(d - i >= d2 - i2) { for(int j = 0; j < d2; j++) c[j + i - i2] += c2[j] * coef; } else { vm tmp(c); c.resize(d2 + i - i2); for(int j = 0; j < d2; j++) c[j + i - i2] += c2[j] * coef; c2 = std::move(tmp); i2 = i, r2 = r; } } return {c.begin() + 1, c.end()}; } pair<vm, vm> find_generating_function(vm a) { auto q = Berlekamp_Massey(a); int d = q.size(); a.resize(d); q.insert(q.begin(), 1); for(int i = 1; i < (int)q.size(); i++) q[i] *= -1; int da=a.size(); a = convolution(a,q); a.resize(da); return {a, q}; } mint compute_Kthterm(vm p, vm q, long long k) { int d = q.size(); assert(q[0] == 1 and p.size() + 1 <= d); while(k) { auto q_minus = q; for(int i = 1; i < d; i += 2) q_minus[i] *= -1; p.resize(2 * d); q.resize(2 * d); int dp=p.size(); int dq=q.size(); p =convolution(p,q_minus); q =convolution(q, q_minus); p.resize(dp); q.resize(dq); for(int i = 0; i < d - 1; i++) p[i] = p[(i << 1) | (k & 1)]; for(int i = 0; i < d; i++) q[i] = q[i << 1]; p.resize(d - 1); q.resize(d); k >>= 1; } return p[0]; } int main() { long long N,K; cin>>N>>K; vm F(300,0); vm FK(300,0); vm FKS(300,0); F[0]=F[1]=1; FK[0]=FK[1]=1; FKS[0]=1; FKS[1]=2; for(int i=2;i<300;i++){ F[i]=F[i-2]+F[i-1]; FK[i]=F[i].pow(K); FKS[i]=FKS[i-1]+FK[i]; } auto GF=find_generating_function(FKS); auto prob = compute_Kthterm(GF.first,GF.second, N-1); cout<<prob.val()<<endl; }