2017 ACM/ICPC Asia Regional Shenyang Online E number number number 题解

2017 ACM/ICPC Asia Regional Shenyang Online E number number number 题解_第1张图片

 

分析:

当n=1时ans=4=f(5)-1;

n=2,ans=12=f(7)-1;

n=3,ans=33=f(9)-1;

于是大胆猜想ans=f(2*k+3)-1。

之后用矩阵快速幂求解f(n)即可,O(logn)。

AC code:

 1 #include
 2 using namespace std;
 3 typedef long long ll;
 4 typedef vector vec;
 5 typedef vector mat;
 6 const ll M=998244353;
 7 mat mul(mat& A,mat& B)
 8 {
 9     mat C(A.size(),vec(B[0].size()));
10     for(int i=0;i)
11         for(int k=0;k)
12             for(int j=0;j0].size();j++)
13                 C[i][j]=(C[i][j]+A[i][k]*B[k][j]) % M;
14     return C;
15 }
16 mat pow(mat A,ll n)
17 {
18     mat B(A.size(),vec(A.size()));
19     for(int i=0;i1;
20     while(n)
21     {
22         if(n&1)    B=mul(B,A);
23         A=mul(A,A);
24         n>>=1;
25     }
26     return B;
27 }
28 int main()
29 {
30     //freopen("input.txt","r",stdin);
31     ll k;
32     while(~scanf("%lld",&k))
33     {
34         mat A(2,vec(2));
35         A[0][0]=1;A[0][1]=1;
36         A[1][0]=1;A[1][1]=0;
37         A=pow(A,2*k+3);
38         printf("%lld\n",A[1][0]-1);
39     }
40     return 0;
41 }
View Code

 

你可能感兴趣的:(2017 ACM/ICPC Asia Regional Shenyang Online E number number number 题解)