当前位置: 首页 > news >正文

hdu 4099 Revenge of Fibonacci 2011 Asia Shanghai Regional Contest

求一个数是第几个斐波那契数的前缀,如果是多个斐波那契数的前缀,则输出最小的那一个。

因为前缀最多40个,所以只需求出每个斐波那契数的前60位(防止进位误差),用字典树保存前缀。

#include<iostream>
#include<cstring>

using namespace std;

struct dictree
{
 struct dictree * child[10];
 int ID;
}*root;

int a[3][61];
char ask[45];

void add(int *a,int *b,int *ans);
void update(int *num,int k);
int search(char * str);

int main()
{
 int t;
 int count=1;
 a[1][0]=0;
 a[2][0]=1;

 root=new struct dictree;
 for(int i=0;i<10;i++)
  root->child[i]=NULL;
 root->ID=-1;

 for(i=3;i<=100000;i++)
 {
  memset(a[i%3],0,sizeof(a[i%3]));
  add(a[(i+1)%3],a[(i+2)%3],a[i%3]);

/*  int ok=60;
  while(a[i%3][ok]<=0)
   ok--;

  cout<<i-2<<":  ";
  for(int j=ok;j>=0;j--)
   cout<<a[i%3][j];
  cout<<endl;*/

  update(a[i%3],i-2);
 }

 cin>>t;
 while(t--)
 {
  cin>>ask;
  cout<<"Case #"<<count++<<": ";

  if(ask[0]=='1' && strlen(ask)==1)
   cout<<0<<endl;
  else
   cout<<search(ask)<<endl;
 }


 return 0;
}

void add(int *a,int *b,int *ans)
{
 int temp=0;
 int ta,tb;
 int t[61]={0};

 int z=60,y=60;
 while(a[z]<=0)
  z--;
 ta=a[z];
 while(a[y]<=0)
  y--;
 tb=b[y];

 if(y<60 || (y==60 && z<60) )
 {
  for(int i=0;i<=60;i++)
  {
   t[i]=a[i]+b[i]+temp;
   temp=t[i]/10;
   t[i]%=10;
  }

  for(i=60;i>=0;i--)
  {
   if(t[i]>0)
    break;
  }

  if(temp>0)
  {
   for(int k=0;k<=i-1;k++)
    ans[k]=t[k+1];
   ans[i]=temp;
  }
  else
   for(int k=0;k<=i;k++)
    ans[k]=t[k];
 }
 else
 {
  if(ta>tb)
  {
   for(int i=0;i<=59;i++)
   {
    t[i]=a[i+1]+b[i]+temp;
    temp=t[i]/10;
    t[i]%=10;
   }

   t[60]=b[60]+temp;
   temp=t[60]/10;
   t[60]%=10;
  }
  else
  {
   for(int i=0;i<=60;i++)
   {
    t[i]=a[i]+b[i]+temp;
    temp=t[i]/10;
    t[i]%=10;
   }
  }

  

  if(temp>0)
  {
   for(int k=0;k<=59;k++)
    ans[k]=t[k+1];
   ans[60]=temp;
  }
  else
   for(int k=0;k<=60;k++)
    ans[k]=t[k];
 }
}

void update(int *num,int k)
{
 struct dictree * now,*newnode;

 now=root;

 int q=60;

 while(num[q]==0)
  q--;

 for(int i=q;i>=0 && q-i<40;i--)
 {
  if(now->child[num[i]]!=NULL)
  {
   now=now->child[num[i]];
  }
  else
  {
   newnode=new struct dictree;
   for(int j=0;j<10;j++)
   {
    newnode->child[j]=NULL;
   }
   newnode->ID=k;

   now->child[num[i]]=newnode;

   now=newnode;
  }
 }
 if(k<now->ID || now->ID==-1)
  now->ID=k;
}

int search(char * str)
{
 struct dictree * now;
 int len=strlen(str);

 now=root;

 for(int i=0;i<len && i<40;i++)
 {
  if(now->child[str[i]-'0']!=NULL)
   now=now->child[str[i]-'0'];
  else
   return -1;
 }
 return now->ID;
}


相关文章:

  • z形矩阵(蛇形矩阵)
  • hdu 2588 欧拉函数
  • hdu 2824 欧拉函数
  • hdu 1311 Relative Relatives
  • hdu 1787 欧拉函数
  • hdu 3911 Black And White 线段树
  • hdu 1068 Girls and Boys 二分匹配
  • 穿越红尘不扰关,回旋天地去复还
  • The guide to implementing 2D platformers(2D动作游戏开发与实现)
  • 2D动作游戏开发与实现(翻译)
  • 关于在WP7的XNA开发模式中引入广告(Ad)
  • HTML5全球普及加速:预计将终结iOS与Android界限(转载)
  • 更改ubuntu的挂载点
  • 学习旅程——轻松快乐
  • ACM模板列表
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java知识点总结(JavaIO-打印流)
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • overflow: hidden IE7无效
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • 微信开放平台全网发布【失败】的几点排查方法
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一道面试题引发的“血案”
  • 如何用纯 CSS 创作一个货车 loader
  • # C++之functional库用法整理
  • #、%和$符号在OGNL表达式中经常出现
  • (27)4.8 习题课
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (论文阅读40-45)图像描述1
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (五)Python 垃圾回收机制
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)UDP基本编程步骤
  • (转)甲方乙方——赵民谈找工作
  • (转载)OpenStack Hacker养成指南
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .net6使用Sejil可视化日志
  • /etc/shadow字段详解
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [20170713] 无法访问SQL Server
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [BT]BUUCTF刷题第8天(3.26)
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [CSS]盒子模型
  • [GYCTF2020]Ez_Express
  • [hdu 3746] Cyclic Nacklace [kmp]