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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Bzoj2656 [Zjoi2012]数列(sequence)

發(fā)布時間:2023/12/4 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Bzoj2656 [Zjoi2012]数列(sequence) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Time Limit:?2 Sec??Memory Limit:?128 MB
Submit:?1448??Solved:?762
[Submit][Status][Discuss]

Description

???小白和小藍在一起上數(shù)學(xué)課,下課后老師留了一道作業(yè),求下面這個數(shù)列的通項公式:

?

?

?

?

?

???小白作為一個數(shù)學(xué)愛好者,很快就計算出了這個數(shù)列的通項公式。于是,小白告訴小藍自己已經(jīng)做出來了,但為了防止小藍抄作業(yè),小白并不想把公式公布出來。于是小白為了向小藍證明自己的確做出來了此題以達到其炫耀的目的,想出了一個絕妙的方法:即讓小藍說一個正整數(shù)N,小白則說出?的值,如果當(dāng)N很大時小白仍能很快的說出正確答案,這就說明小白的確得到了公式。但這個方法有一個很大的漏洞:小藍自己不會做,沒法驗證小白的答案是否正確。作為小藍的好友,你能幫幫小藍嗎?

?

Input

??????輸入文件第一行有且只有一個正整數(shù)T,表示測試數(shù)據(jù)的組數(shù)。

?????第2~T+1行,每行一個非負整數(shù)N。

?

Output

??????輸出文件共包含T行。

第i行應(yīng)包含一個不含多余前綴0的數(shù),它的值應(yīng)等于An(n為輸入數(shù)據(jù)中第i+1行被讀入的整數(shù))

【樣例輸入】

?

Sample Input

3

1

3

10

Sample Output

1
2
3


HINT

?

T<=20,N<=10^100

?

Source

?

遞歸+高精度

?

暴力遞歸只能解決10^8的問題

↑優(yōu)化高精度無果之后,覺得應(yīng)該可以找規(guī)律。

發(fā)現(xiàn)算奇數(shù)的時候,下面的偶數(shù)都算過了。

那么加個類似記憶化的東西就行

1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 #include<vector> 8 #define LL long long 9 using namespace std; 10 const int mxn=305; 11 int read(){ 12 int x=0,f=1;char ch=getchar(); 13 while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} 14 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} 15 return x*f; 16 } 17 struct NUM{ 18 int len; 19 int a[mxn]; 20 friend NUM operator + (NUM a,NUM b){ 21 a.len=max(a.len,b.len); 22 for(int i=1;i<=a.len;i++){ 23 a.a[i]+=b.a[i]; 24 if(a.a[i]>9){ 25 a.a[i+1]+=a.a[i]/10; 26 a.a[i]%=10; 27 } 28 } 29 if(a.a[a.len+1])a.len++; 30 return a; 31 } 32 friend NUM operator / (NUM a,int b){ 33 for(int i=a.len;i;i--){ 34 a.a[i-1]+=(a.a[i]%b)*10; 35 a.a[i]/=b; 36 } 37 while(a.len>1 && !a.a[a.len]) a.len--; 38 return a; 39 } 40 }N,p,q; 41 void Debug(NUM x){ 42 for(int i=x.len;i;i--) 43 printf("%d",x.a[i]); 44 printf("\n"); 45 return; 46 } 47 void calc(NUM x){ 48 // NUM tmp; 49 if(x.len==1 && x.a[1]==1){ 50 p=x; 51 q.len=1;memset(q.a,0,sizeof q.a); 52 q.a[1]=1; 53 return; 54 } 55 calc(x/2); 56 if(x.a[1]&1)p=p+q; 57 else q=q+p; 58 // return tmp; 59 } 60 char s[mxn]; 61 int T; 62 int main(){ 63 // freopen("sequence.in","r",stdin); 64 // freopen("sequence.out","w",stdout); 65 T=read(); 66 int i,j; 67 p.len=1;p.a[1]=1; 68 q.len=1;q.a[1]=0; 69 while(T--){ 70 memset(N.a,0,sizeof N.a); 71 // 72 scanf("%s",s+1); 73 int len=strlen(s+1); 74 for(i=1;i<=len;i++){ 75 N.a[i]=s[len-i+1]-'0'; 76 } 77 N.len=len; 78 calc(N); 79 Debug(p); 80 } 81 return 0; 82 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/SilverNebula/p/6441684.html

總結(jié)

以上是生活随笔為你收集整理的Bzoj2656 [Zjoi2012]数列(sequence)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。