tyy_again @ 2024-08-22 18:41:21
#include<bits/stdc++.h>
using namespace std;
long n,cs[6000]={0},js=0,wws=1;
void jw(){
for(int s=1;s<=wws;s++){
if(cs[s]/10!=0){
cs[s]%=10;
cs[s+1]++;
if(s==wws)
wws++;
}
}
}
void dg(){
for(int s=1;s<=2;s++){
js+=s;
if(js==n){
cs[1]++;
if(cs[1]/10!=0)
jw();
}
else if(js<n)
dg();
else if(js>n){
js-=s;
break;
}
js-=s;
}
}
int main(){
cin>>n;
for(int s=1;s<=2;s++){
js=0;
js+=s;
if(js==n){
cs[1]++;
if(cs[1]/10!=0)
jw();
}
else if(js<n)
dg();
else if(js>n)
break;
}
for(;wws>0;wws--)
cout<<cs[wws];
return 0;
}
请问这题还能怎么优化 5个点超时
by szrgjxms @ 2024-08-22 18:44:00
有没有种可能,这道题是斐波那契数列
by All_Wrong_Answer @ 2024-08-22 18:59:37
@tyy_again
这是高精度+斐波那契数列吧
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
int x[10005];
int y[10005];
int z[10005];
int a;
int f=1;
int main(){
x[1]=1;
y[1]=1;
cin>>a;
if(a==1){
cout<<"1";
return 0;
}
for(int i=2;i<=a;i++){
if(f==1){
for(int j=1;j<=2000;j++){
z[j]=(x[j]+y[j]);
}
for(int j=1;j<=2000;j++){
if(z[j]>=10){
z[j+1]++;
z[j]-=10;
}
}
f=2;
}
else if(f==2){
for(int j=1;j<=2000;j++){
x[j]=(z[j]+y[j]);
}
for(int j=1;j<=2000;j++){
if(x[j]>=10){
x[j+1]++;
x[j]-=10;
}
}
f=3;
}
else if(f==3){
for(int j=1;j<=2000;j++){
y[j]=(z[j]+x[j]);
}
for(int j=1;j<=2000;j++){
if(y[j]>=10){
y[j+1]++;
y[j]-=10;
}
}
f=1;
}
}
if(f==1){
int o=0;
for(int i=2000;i>=1;i--){
if(o==0&&y[i]!=0) o=1;
if(o==1) cout<<y[i];
}
return 0;
}
if(f==2){
int o=0;
for(int i=2000;i>=1;i--){
if(o==0&&z[i]!=0) o=1;
if(o==1) cout<<z[i];
}
return 0;
}
if(f==3){
int o=0;
for(int i=2000;i>=1;i--){
if(o==0&&x[i]!=0) o=1;
if(o==1) cout<<x[i];
}
return 0;
}
return 0;
}
by tyy_again @ 2024-08-22 19:04:41
thanks
by hhy8399 @ 2024-08-23 23:21:52
@tyy_again 记忆化