HDU 4099 Revenge of Fibonacci (数学+字典数)
来源:互联网 发布:tts软件怎么用 编辑:程序博客网 时间:2024/05/15 15:45
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4099
这个题目就是一个坑或。
题意:给你不超过40的一串数字,问你这串数字是Fibonacci多少的开头几位数字,如果不存在则输出-1.
题解:明明说好的不超过40,但是在建字典数的时候不加i<41就超内存了,杭电你是想咋地,害的我比较好多人的代码,一点一点试出来的。
AC代码:
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <cstdlib>#include <cmath>#include <vector>#include <list>#include <deque>#include <queue>#include <iterator>#include <stack>#include <map>#include <set>#include <algorithm>#include <cctype>using namespace std;#define si1(a) scanf("%d",&a)#define si2(a,b) scanf("%d%d",&a,&b)#define sd1(a) scanf("%lf",&a)#define sd2(a,b) scanf("%lf%lf",&a,&b)#define ss1(s) scanf("%s",s)#define pi1(a) printf("%d\n",a)#define pi2(a,b) printf("%d %d\n",a,b)#define mset(a,b) memset(a,b,sizeof(a))#define forb(i,a,b) for(int i=a;i<b;i++)#define ford(i,a,b) for(int i=a;i<=b;i++)typedef __int64 LL;const int N=10;const int INF=0x3f3f3f3f;const double PI=acos(-1.0);const double eps=1e-7;char str[4][100];struct Trie{ int v; Trie *next[N]; Trie() { v=-1; for(int i=0;i<N;i++) next[i]=NULL; }}*root;void creat_trie(char s[],int x){ int len=strlen(s); Trie *p=root; for(int i=0;i<len&&i<41;i++)//这个地方太肯爹了,明明说好的不超过40,不加i<41就超内存了,杭电你是想咋地 { int id=s[i]-'0'; if(p->next[id]==NULL) p->next[id]=new Trie(); p=p->next[id]; if(p->v<0) p->v=x; }}void add(char a[],char b[],char c[]){ int lena=strlen(a)-1,lenb=strlen(b)-1; int k=0,up=0; int x,y,z; while(lena>=0||lenb>=0) { if(lena<0) x=0; else x=a[lena]-'0'; if(lenb<0) y=0; else y=b[lenb]-'0'; z=x+y+up; c[k++]=z%10+'0'; up=z/10; lena--; lenb--; } if(up>0) c[k++]=up+'0'; c[k]=0; for(int i=0;i<k/2;i++) swap(c[i],c[k-i-1]);// cout<<k<<" "<<c<<endl;system("pause");}int find_trie(char st[]){ Trie *p=root; int len=strlen(st); int tmp; for(int i=0;i<len;i++) { int id=st[i]-'0'; if(p->next[id]==NULL) return -1; else { p=p->next[id]; tmp=p->v; } } return tmp;}void init(){ str[1][0]='1'; str[1][1]=0; creat_trie(str[1],0); str[2][0]='1'; str[2][1]=0; creat_trie(str[2],1); for(int i=2;i<100000;i++)//注意题目是小于,不能取等号。。 { int len1=strlen(str[1]); int len2=strlen(str[2]); if(len2>60)//舍去地位 { str[2][len2-1]=0; str[1][len1-1]=0; } add(str[1],str[2],str[3]); creat_trie(str[3],i); strcpy(str[1],str[2]); strcpy(str[2],str[3]); }}int main(){// freopen("input.txt","r",stdin); root=new Trie(); init(); int T,ca=0; char st[66]; si1(T); while(T--) { ss1(st); printf("Case #%d: %d\n",++ca,find_trie(st)); } return 0 ;}
- HDU 4099 Revenge of Fibonacci (数学+字典数)
- 字典树,数学(Revenge of Fibonacci,hdu 4099)
- hdu 4099 Revenge of Fibonacci (字典树)
- hdu 4099 Revenge of Fibonacci(字典树)
- hdu 4099 Revenge of Fibonacci(字典树)
- HDU 5018 Revenge of Fibonacci(数学)
- hdu 4099 Revenge of Fibonacci(字典树+大数加法)
- HDU 4099 Revenge of Fibonacci(字典树+大数加法)
- hdu 4099 Revenge of Fibonacci 大数加法+字典树
- hdu 4099 Revenge of Fibonacci 字典树+大数
- HDU 4099 Revenge of Fibonacci(高精度+字典树)
- HDU 4099 Revenge of Fibonacci(高精度加法+字典树Trie)
- HDU 4099 Revenge of Fibonacci(大数加法+字典树)
- hrbust 1209/hdu 4099 Revenge of Fibonacci【字典树+大数】
- hdu 4099 Revenge of Fibonacci 字典树+斐波拉契数列数列
- hdu 4099 Revenge of Fibonacci 字典树+斐波拉契数列数列
- HDU 4099 Revenge of Fibonacci
- hdu 4099 Revenge of Fibonacci
- 做技术做软件-----如何才能拿到上万的月薪
- 编程基础-------C语言函数返回二维数组的做法
- C语言中自定义函数和函数的使用方法
- IOS详解TableView——性能优化及手工绘制UITableViewCell
- ZOJ 3511 不相交切切多边形 线段树求最大边数
- HDU 4099 Revenge of Fibonacci (数学+字典数)
- 第98天的交易(2013-9-26)(-50)(-90)(数据单总盈利:737.35)(贵金属总盈利:-500.42)
- paip.提升用户体验---c++ qt 取消gcc编译的警告信息.txt
- 在线免费视频和文档
- C语言位运算
- 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题
- Django 1.5 + Python 2.7.3 关于Django的国际化(i18n)
- 在 Finder 标题栏上显示目录的完整路径
- JSP小实例--计算器