原文链接:https://www.dreamwings.cn/hdu5686/2645.html

Problem B

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 403    Accepted Submission(s): 136

Problem Description
  度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。
 
Input
这里包括多组测试数据,每组测试数据包含一个正整数,代表全1序列的长度。


 
Output
对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。
 
Sample Input
  1. 1
  2. 3
  3. 5
 
Sample Output
  1. 1
  2. 3
  3. 8
  4. Hint
  5. 如果序列是:(111)。可以构造出如下三个新序列:(111), (21), (12)。
  6.  
 
Source
 

题目说了那么多,终究没有说这就是一个斐波那契数列~o(╯□╰)o
既然是斐波那契数列,接下来就很好做咯!不过要注意,斐波那契数列中的第200个可是很大的哦!

C/C++ 用大数 Java用Biginteger

AC代码:

  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #define N 22 //22位能表示第100个以内的斐波那契数列值
  4. //大数加法函数
  5. char * Add(char * x1, char * x2)
  6. {
  7. char * y = (char *) malloc(sizeof(char *) * N);
  8. int i = 0;
  9. int t = 0; //表示进位
  10. //实现大数加法,数组前面存的是数值的高位。如123在数组中是{'3','2','1','\0'}
  11. //处理相同长度的部分
  12. while(x1[i] != '\0' && x2[i] != '\0')
  13. {
  14. y[i] = (x1[i] - '0' + x2[i] - '0' + t) % 10 + '0';
  15. t = (x1[i] - '0' + x2[i] - '0' + t) / 10;
  16. i++;
  17. }
  18. //如果x1比x2长
  19. while(x1[i] != '\0')
  20. {
  21. y[i] = (x1[i] - '0' + t) % 10 + '0';
  22. t = (x1[i] - '0' + t) / 10;
  23. i++;
  24. }
  25. //如果x2比x1长
  26. while(x2[i] != '\0')
  27. {
  28. y[i] = (x2[i] - '0' + t) % 10 + '0';
  29. t = (x2[i] - '0' + t) / 10;
  30. i++;
  31. }
  32. //如果还有进位
  33. if (t == 1)y[i++] = '1';
  34. y[i] = '\0';
  35. return y;
  36. }
  37. //输出
  38. void Output(char * y)
  39. {
  40. //先找到\0的位置,然后逆序输出
  41. int i = 0;
  42. while(y[i] != '\0')i++;
  43. i--;
  44. while(i >= 0)
  45. printf("%d", y[i--] - '0');
  46. }
  47.  
  48. int main()
  49. {
  50. int b;
  51. while(~scanf("%d", &b))
  52. {
  53. if(b)
  54. {
  55. getchar();
  56. int count = b;
  57. int i;
  58. char * x1 = (char *)malloc(sizeof(char) * N);
  59. char * x2 = (char *)malloc(sizeof(char) * N);
  60. char * y = (char *)malloc(sizeof(char) * N);
  61. //初始化y, x1, x2
  62. for (i = 0; i < N; i++)
  63. {
  64. x1[i] = '\0';
  65. x2[i] = '\0';
  66. y[i] = '\0';
  67. }
  68. //给x1和x2赋初值
  69. x1[0] = '0';
  70. x1[1] = '\0';
  71. x2[0] = '1';
  72. x2[1] = '\0';
  73. //斐波那契数列,叠加
  74. for(i = 1; i <= count; i++)
  75. {
  76. y = Add(x1, x2);
  77. x1 = x2;
  78. x2 = y;
  79. }
  80. //输出结果
  81. Output(y);
  82. printf("\n");
  83. }
  84. else printf("\n");
  85. }
  86. return 0;
  87. }
  1. import java.util.Scanner;
  2. import java.math.BigInteger;
  3. public class Main {
  4. public static BigInteger[]dp=new BigInteger[205];
  5. public static void main(String[] args) {
  6. // TODO Auto-generated method stub
  7. Scanner cin=new Scanner(System.in);
  8. //int n=cin.nextInt();
  9. Init();
  10. while(cin.hasNext())
  11. {
  12. int n=cin.nextInt();
  13. if(n>=1&&n<=200)
  14. {
  15. System.out.print(dp[n]);
  16. }
  17. System.out.println();
  18. }
  19. }
  20. public static void Init()
  21. {
  22. dp[1]=new BigInteger("1");
  23. dp[2]=new BigInteger("2");
  24. for(int i=3;i<=201;i++)
  25. {
  26. dp[i]=dp[i-1].add(dp[i-2]);
  27. }
  28. }
  29. }

HDU 5686:2016"百度之星" - 资格赛 Problem B的更多相关文章

  1. HDU 5688:2016"百度之星" - 资格赛 Problem D

    原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others)    ...

  2. HDU 5685:2016"百度之星" - 资格赛 Problem A

    原文链接:https://www.dreamwings.cn/hdu5685/2637.html Problem A Time Limit: 2000/1000 MS (Java/Others)    ...

  3. [HDU5686]2016"百度之星" - 资格赛 Problem B

    题目大意:给你n,规定一个串中相邻的两个1可以合并为一个2(别的不行),让你求长度为n的全1串最多能变成多少种不同的串. 解题思路:我们先来找一波规律,发现n=1,2,3,4,5时答案分别为1,2,3 ...

  4. [HDU5687]2016"百度之星" - 资格赛 Problem C

    题目大意:有n个操作,每个操作是以下三个之一,要你实现这些操作. 1.insert : 往字典中插入一个单词2.delete: 在字典中删除所有前缀等于给定字符串的单词3.search: 查询是否在字 ...

  5. [HDU5688]2016"百度之星" - 资格赛 Problem D

    题目大意:给你n个字符串,如果一个字符串可以通过重新排列变成另一个字符串,则认为这两个字符串相等.每输入一个字符串,输出这个字符串和与它相等的之前出现了几次. 解题思路:我们可以用map保存一个字符串 ...

  6. [HDU5685]2016"百度之星" - 资格赛 Problem A

    题目大意:给你一个字符串,和一些问题,每个问题问你[l,r]子串的哈希值是多少. 哈希值计算方法为:$H(s)=\prod _{i=1} ^{i\leq len(s)}(s_i-28)(mod\ 99 ...

  7. 2016百度之星资格赛 Problem A(前缀积与求逆元)

    题意:给出一个字符串,每次询问给出x和y要求算出从x到y的每个字符的(ASCII 码值-28)的值的积(mod9973). 分析:首先的想法肯定是算出每个位置的前缀积,然后只要F[y]/F[x-1]即 ...

  8. 2016百度之星资格赛 Problem B(大数+组合数)

    题意:度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列.最多200个1. 比如 ...

  9. 2016百度之星 资格赛ABCDE

    看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...

随机推荐

  1. 细说jQuery原型的创建和实现原理,并用实例简单模仿

    在解析jQuery实现机理之前,我们先总结一下几点知识,这些都是我学习路上遇到的坑,我跌倒过很多次,现在把它补上: 1)自定义构造函数,如下例: function person(){ this.nam ...

  2. unity3d插件Daikon Forge GUI 中文教程3-基础控件Button和Sprite的使用

    2.2添加一个按钮Button 来看看特有的属性:Button Properties Data 显示的文本 Behavior 中的几个: Aoto Size 选中时就是按钮的背景会根据Data中的文本 ...

  3. app 尺寸

    web app 手机桌面logo尺寸大小(三种 ):114 72 57 

  4. CMD中常用命令

    打开CMD的几种方法: 搜索一下 1: 打开我的电脑,在地址栏输入该地址后按回车键打开:C:\WINDOWS\system32\cmd.exe 2: 打开我的电脑,进入C盘WINDOWS\system ...

  5. Java实现智能机器自动操作电脑

    package com.tz.util; import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.event. ...

  6. Greenplum各种Tips(不定时更新)

    Greenplum接触也有一段时间了,在使用过程中积累了一些命令,在此分享给大家. 1. 查看segment是否有切换(没有记录则没有切换) SELECT * from gp_segment_conf ...

  7. C使用相关笔记

    #将c文件编译成动态库 //hello.c int hello_add(int a, int b) { return a + b; } gcc -O -c -fPIC -o hello.o hello ...

  8. wpf 属性变更通知接口 INotifyPropertyChanged

    在wpf中将控件绑定到对象的属性时, 当对象的属性发生改变时必须通知控件作出相应的改变, 所以此对象需要实现 INotifyPropertyChanged 接口 例: //实现属性变更通知接口 INo ...

  9. jquery 图片本地预览

    uploadPreview.js /* *名称:图片上传本地预览插件 v1.1 *介绍:基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari *参数说明: I ...

  10. 【五子棋AI循序渐进】关于VCT,VCF的思考和核心代码

    前面几篇发布了一些有关五子棋的基本算法,其中有一些BUG也有很多值得再次思考的问题,在框架和效果上基本达到了一个简单的AI的水平,当然,我也是初学并没有掌握太多的高级技术.对于这个程序现在还在优化当中 ...