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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【BZOJ1002】[FJOI2007]轮状病毒 递推+高精度

發布時間:2023/12/2 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BZOJ1002】[FJOI2007]轮状病毒 递推+高精度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

給定n(N<=100),編程計算有多少個不同的n輪狀病毒。

Input

第一行有1個正整數n。

Output

將編程計算出的不同的n輪狀病毒數輸出

Sample Input

3

Sample Output

16

HINT

Source

Solution:推導不會,看不懂,知道了公式f[i]=f[i-1]*3-f[i-2]+2;要加高精度然后水過,可以打表找規律,不太會打。。。找規律,VFK的推導清晰全過程

1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 struct data{int a[101],len;}f[101]; 5 int n; 6 data gjc(data a,int k) 7 { 8 for (int i=1;i<=a.len;i++) a.a[i]*=k; 9 for (int i=1;i<=a.len;i++) 10 { 11 a.a[i+1]+=a.a[i]/10; 12 a.a[i]%=10; 13 } 14 if (a.a[a.len+1]!=0) a.len++; 15 return a; 16 } 17 18 data gjj(data a,data b) 19 { 20 a.a[1]+=2; 21 int j=1; 22 while (a.a[j]>=10) 23 { 24 a.a[j]%=10; 25 a.a[j+1]++; 26 j++; 27 } 28 if (a.a[a.len+1]!=0) a.len++; 29 for (int i=1;i<=a.len;i++) 30 { 31 a.a[i]-=b.a[i]; 32 if (a.a[i]<0) {a.a[i]+=10; a.a[i+1]--;} 33 } 34 while (a.a[a.len]==0) a.len--; 35 return a; 36 } 37 38 int main() 39 { 40 scanf("%d",&n); 41 f[1].a[1]=1;f[2].a[1]=5; 42 f[1].len=f[2].len=1; 43 for (int i=3;i<=n;i++) 44 f[i]=gjj(gjc(f[i-1],3),f[i-2]); 45 for (int i=f[n].len;i>0;i--) 46 printf("%d",f[n].a[i]); 47 return 0; 48 } View Code

?

轉載于:https://www.cnblogs.com/DMoon/p/5247765.html

總結

以上是生活随笔為你收集整理的【BZOJ1002】[FJOI2007]轮状病毒 递推+高精度的全部內容,希望文章能夠幫你解決所遇到的問題。

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