E - Revenge of Fibonacci



https://vjudge.net/contest/173966#problem/E

题目确实不好说,反正用大数加法+字典树就可以了,哇了N次我就不说什么了,
主要是还说我的大数写错了,然后单独验证了,没毛病,但是貌似我之前的赋值是有问题的,
然后不想写了,过了一天还是又翻出来了。

1
#include<iostream> 2 #include<stdio.h> 3 using namespace std; 4 string fib(string s1,string s2) 5 { 6 if(s1.length()<s2.length()) 7 { 8 string temp=s1; 9 s1=s2; 10 s2=temp; 11 } 12 int i,j; 13 if(s2.length()>49) 14 { 15 for(i=49,j=s2.length()+49-s1.length();i>=0;i--,j--) 16 { 17 s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0)); 18 if(s1[i]-'0'>=10) 19 { 20 s1[i]=char((s1[i]-'0')%10+'0'); 21 if(i) s1[i-1]++; 22 else s1='1'+s1; 23 } 24 } 25 } 26 else 27 { 28 for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--) 29 { 30 s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0)); 31 if(s1[i]-'0'>=10) 32 { 33 s1[i]=char((s1[i]-'0')%10+'0'); 34 if(i) s1[i-1]++; 35 else s1='1'+s1; 36 } 37 } 38 } 39 return s1; 40 } 41 string a[100002]; 42 int cnt=1; 43 int sum[10000050][11]; 44 int num[10000050]; 45 void add(string s,int number) 46 { 47 int root=0; 48 for(int i=0;i<s.length()&&i<42;i++) 49 { 50 int xx=s[i]-'0'; 51 if(!sum[root][xx]) 52 { 53 sum[root][xx]=cnt++; 54 num[sum[root][xx]]=number; 55 } 56 root=sum[root][xx]; 57 } 58 } 59 int Find(string s) 60 { 61 int root=0; 62 for(int i=0;i<s.length();i++) 63 { 64 int xx=s[i]-'0'; 65 root=sum[root][xx]; 66 if(root==0) 67 return 0; 68 } 69 return num[root]; 70 } 71 int main() 72 { 73 a[1]="1"; 74 a[2]="1"; 75 add(a[1],1); 76 add(a[2],2); 77 for(int i=3;i<=100000;i++) 78 { 79 a[i]=fib(a[i-1],a[i-2]); 80 add(a[i],i); 81 } 82 int T; 83 while(cin>>T) 84 { 85 int t=0; 86 string st; 87 while(T--) 88 { 89 t++; 90 cin>>st; 91 int tmp=Find(st); 92 if(tmp){ 93 cout<<"Case #"<<t<<": "<<tmp-1<<endl; 94 }else{ 95 cout<<"Case #"<<t<<": "<<-1<<endl; 96 } 97 } 98 } 99 return 0; 100 }

 

转载于:https://www.cnblogs.com/zllwxm123/p/7274423.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值