码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-09-03 22:06:08      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:def   std   splay   space   show   pac   number   view   cto   

技术图片

 

分析:

当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 题解

标签:def   std   splay   space   show   pac   number   view   cto   

原文地址:https://www.cnblogs.com/cautx/p/11455746.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!