日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ 3231: [Sdoi2008]递归数列 (JZYZOJ 1353) 矩阵快速幂

發布時間:2023/12/9 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ 3231: [Sdoi2008]递归数列 (JZYZOJ 1353) 矩阵快速幂 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://www.lydsy.com/JudgeOnline/problem.php?id=3231 和斐波那契一個道理在最后加一個求和即可 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 //using namespace std; 5 const int maxn=10010; 6 const double eps=1e-8; 7 long long modn; 8 long long n,l,r; 9 long long b[20]={}; 10 struct mat{ 11 long long e[20][20]; 12 mat(){ memset(e,0,sizeof(e)); } 13 }; 14 mat a; 15 mat Mul(mat x,mat y){ 16 mat z; 17 for(int i=1;i<=n+1;i++){ 18 for(int j=1;j<=n+1;j++){ 19 for(int k=1;k<=n+1;k++){ 20 z.e[i][j]+=x.e[i][k]*y.e[k][j]; 21 z.e[i][j]%=modn; 22 } 23 } 24 } 25 return z; 26 } 27 mat Pow(mat x,long long k){ 28 mat z; 29 for(int i=1;i<=n+1;i++){ 30 z.e[i][i]=1; 31 } 32 while(k>0){ 33 if(k&1){ 34 z=Mul(z,x); 35 } 36 x=Mul(x,x); 37 k/=2; 38 }/*for(int i=1;i<=n;i++){ 39 for(int j=1;j<=n;j++){ 40 std::cout<<z.e[i][j]<<' '; 41 } 42 std::cout<<std::endl; 43 }*/ 44 return z; 45 } 46 long long doit(long long x){ 47 if(x<n){ 48 return b[x+1]; 49 } 50 mat z=Pow(a,x-n+1); 51 long long ans=0,s=0,d=0; 52 for(int i=1;i<=n+1;i++){ 53 d+=z.e[n][i]*b[i]; 54 s+=z.e[n+1][i]*b[i]; 55 d%=modn;s%=modn; 56 } 57 ans=(s+d)%modn; 58 ans%=modn; 59 return ans; 60 } 61 int main(){ 62 scanf("%lld",&n); 63 n+=1; 64 for(int i=2;i<=n;i++){ 65 scanf("%lld",&b[i]); 66 b[n+1]+=b[i]; 67 } 68 b[n+1]-=b[n]; 69 for(int i=n;i>1;i--){ 70 scanf("%lld",&a.e[n][i]); 71 } 72 long long l,r; 73 scanf("%lld%lld%lld",&l,&r,&modn); 74 for(int i=2;i<=n;i++){ 75 b[i]%=modn; 76 a.e[i-1][i]=1;a.e[n][i]%=modn; 77 } 78 a.e[n+1][n+1]=1,a.e[n+1][n]=1; 79 /*for(int i=1;i<=n+1;i++){ 80 for(int j=1;j<=n+1;j++){ 81 std::cout<<a.e[i][j]<<' '; 82 } 83 std::cout<<std::endl; 84 }*/ 85 long long ans=(doit(r)-doit(l-1)+modn)%modn; 86 printf("%lld\n",ans); 87 return 0; 88 } View Code

?

轉載于:https://www.cnblogs.com/137shoebills/p/7786497.html

總結

以上是生活随笔為你收集整理的BZOJ 3231: [Sdoi2008]递归数列 (JZYZOJ 1353) 矩阵快速幂的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。