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

Posted cautx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017 ACM/ICPC Asia Regional Shenyang Online E number number number 题解相关的知识,希望对你有一定的参考价值。

技术图片

 

分析:

当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<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 typedef vector<ll> vec;
 5 typedef vector<vec> 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<A.size();i++)
11         for(int k=0;k<B.size();k++)
12             for(int j=0;j<B[0].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;i<A.size();i++)    B[i][i]=1;
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 题解的主要内容,如果未能解决你的问题,请参考以下文章

2017 ACM/ICPC Asia Regional Beijing Online

2017 ACM/ICPC Asia Regional Qingdao Online

2017 ACM/ICPC Asia Regional Shenyang Online spfa+最长路

hdu6206 Apple 2017 ACM/ICPC Asia Regional Qingdao Online

HDU 6198(2017 ACM/ICPC Asia Regional Shenyang Online)

HDU - 6215 2017 ACM/ICPC Asia Regional Qingdao Online J - Brute Force Sorting