T1:

北京集训:20180314

北京集训:20180314

北京集训:20180314
大力矩阵乘法有40分,我也就会这么做了。
以下为官方题解:

北京集训:20180314

北京集训:20180314
(至今仍然不会常系数线性递推的蒟蒻......)
40分代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 typedef long long int lli;
 6 using namespace std;
 7 const int maxm=210;
 8 const int mod=998244353,base=19260817;
 9 
10 int now;
11 struct Matrix {
12     lli dat[maxm][maxm];
13     Matrix(int tpe=0) {
14         memset(dat,0,sizeof(dat));
15         if( tpe ) for(int i=1;i<=now;i++) dat[i][i] = 1;
16     }
17     lli* operator [] (const int &x) {
18         return dat[x];
19     }
20     friend Matrix operator * (const Matrix &a,const Matrix &b) {
21         Matrix ret(0);
22         for(int i=1;i<=now;i++)
23             for(int j=1;j<=now;j++)
24                 for(int k=1;k<=now;k++)
25                     ( ret[i][j] += a.dat[i][k] * b.dat[k][j] % mod ) %= mod;
26         return ret;
27     }
28 }ini,trans,ans;
29 
30 int m,a,n;
31 inline void build() {
32     ini = trans = Matrix(0);
33     for(int i=1;i<=now;i++) trans[i][now] = ( a - 1 + mod ) % mod;
34     for(int i=1;i<now;i++) trans[i+1][i] = 1;
35     ini[1][1] = a % mod;
36     for(int i=2;i<=now;i++) ini[1][i] = ini[1][i-1] * a % mod;
37 }
38 inline Matrix fastpow(Matrix base,int tim) {
39     Matrix ret(1);
40     while(tim) {
41         if( tim & 1 ) ret = ret * base;
42         if( tim >>= 1 ) base = base * base;
43     }
44     return ret;
45 }
46 inline lli calc(int nn) {
47     now = nn , build();
48     if( n <= now ) return ini[1][n];
49     ans = ini * fastpow(trans,n-now);
50     return ans[1][now];
51 }
52 inline lli getans() {
53     lli ret = 0 , mul = 1;
54     for(int i=0;i<=m;i++) {
55         ret += calc(i) * mul % mod , 
56         ret %= mod ,
57         mul = mul * base % mod;
58     }
59     return ret;
60 }
61 
62 int main() {
63     scanf("%d%d%d",&m,&a,&n);
64     printf("%lld\n",getans());
65     return 0;
66 }
View Code

相关文章:

  • 2021-09-29
  • 2021-10-09
  • 2022-01-17
  • 2021-06-13
  • 2022-01-27
  • 2022-01-14
  • 2021-09-13
  • 2021-09-18
猜你喜欢
  • 2021-04-20
  • 2021-08-14
  • 2022-01-20
  • 2021-09-16
  • 2021-11-27
  • 2021-05-02
  • 2021-12-09
相关资源
相似解决方案