原文链接: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 3 5
 
Sample Output
1 3 8
Hint
如果序列是:(111)。可以构造出如下三个新序列:(111), (21), (12)。
 
Source
 

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

C/C++ 用大数 Java用Biginteger

AC代码:

#include "stdio.h"
#include "stdlib.h"
#define N 22                //22位能表示第100个以内的斐波那契数列值
//大数加法函数
char * Add(char * x1, char * x2)
{
    char * y = (char *) malloc(sizeof(char *) * N);
    int i = 0;
    int t = 0;              //表示进位
    //实现大数加法,数组前面存的是数值的高位。如123在数组中是{'3','2','1','\0'}
    //处理相同长度的部分
    while(x1[i] != '\0' && x2[i] != '\0')
    {
        y[i] = (x1[i] - '0' + x2[i] - '0' + t) % 10 + '0';
        t = (x1[i] - '0' + x2[i] - '0' + t) / 10;
        i++;
    }
    //如果x1比x2长
    while(x1[i] != '\0')
    {
        y[i] = (x1[i] - '0' + t) % 10 + '0';
        t = (x1[i] - '0' + t) / 10;
        i++;
    }
    //如果x2比x1长
    while(x2[i] != '\0')
    {
        y[i] = (x2[i] - '0' + t) % 10 + '0';
        t = (x2[i] - '0' + t) / 10;
        i++;
    }
    //如果还有进位
    if (t == 1)y[i++] = '1';
    y[i] = '\0';
    return y;
}
//输出
void Output(char * y)
{
    //先找到\0的位置,然后逆序输出
    int i = 0;
    while(y[i] != '\0')i++;
    i--;
    while(i >= 0)
        printf("%d", y[i--] - '0');
}

int main()
{
    int b;
    while(~scanf("%d", &b))
    {
        if(b)
        {
            getchar();
            int count = b;
            int i;
            char * x1 = (char *)malloc(sizeof(char) * N);
            char * x2 = (char *)malloc(sizeof(char) * N);
            char * y = (char *)malloc(sizeof(char) * N);
            //初始化y, x1, x2
            for (i = 0; i < N; i++)
            {
                x1[i] = '\0';
                x2[i] = '\0';
                y[i] = '\0';
            }
            //给x1和x2赋初值
            x1[0] = '0';
            x1[1] = '\0';
            x2[0] = '1';
            x2[1] = '\0';
            //斐波那契数列,叠加
            for(i = 1; i <= count; i++)
            {
                y = Add(x1, x2);
                x1 = x2;
                x2 = y;
            }
            //输出结果
            Output(y);
            printf("\n");
        }
        else printf("\n");
    }
    return 0;
}
import java.util.Scanner;
import java.math.BigInteger;
public class Main {
    public static BigInteger[]dp=new BigInteger[205];
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner cin=new Scanner(System.in);
        //int n=cin.nextInt();
        Init();
        while(cin.hasNext())
        {
            int n=cin.nextInt();
            if(n>=1&&n<=200)
            {
                System.out.print(dp[n]);
            }
            System.out.println();
        }
    }
    public static void Init()
    {
        dp[1]=new BigInteger("1");
        dp[2]=new BigInteger("2");
        for(int i=3;i<=201;i++)
        {
            dp[i]=dp[i-1].add(dp[i-2]);
        }
    }
}

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. 演示一个导致ora-01555错误的场景

    1创建一个undo表空间 2查看当前undo配置 3更该默认undo表空间 4确认更改的配置 5创建一张测试表 6模拟批量操作 7 查询2分钟前的数据 从这里可以到当查询2分钟前的数据时候,系统报出O ...

  2. 新建一个新的spring boot项目

    简单几步,在Eclipse中创建一个新的spring Boot项目: 1.Eclipse中安装STS插件: Help -> Eclipse Marketplace... Search或选择&qu ...

  3. MySQL配置文件改变了datadir值

    从Noinstall Zip Archive中安装MySQL正在从Noinstall软件包安装MySQL的用户可以使用这个说明来手动安装MySQL.从Zip archive 中安装MySQL的 步骤如 ...

  4. svn服务配置和日常维护命令

    Subversion独立服务和与apache整合服务. 一 .Svn独立服务安装 操作系统: Redhat Linux AS3  AS 4   ContOS AS 4 安装包获取: 下载[url]ht ...

  5. IOS第18天(1,核心动画layer, 旋转,缩放,平移,边框,剪裁,圆角)

    ****动画效果 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [UIView animateWithDurat ...

  6. Java中Collection和Collections的区别(引用自:http://www.cnblogs.com/dashi/p/3597937.html)

      1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Co ...

  7. spring02

    1.在spring容器中的一个bean的整个生命周期 1.启动spring容器 2.bean实例化 3.装配属性 4.BeanNameAware:setBeanName 5.BeanFactoryAw ...

  8. Docker的私有仓库

    server 192.168.1.107   registry   ---push client 192.168.1.103                 --pull [192.168.1.107 ...

  9. Hadoop学习笔记: MapReduce Java编程简介

    概述 本文主要基于Hadoop 1.0.0后推出的新Java API为例介绍MapReduce的Java编程模型.新旧API主要区别在于新API(org.apache.hadoop.mapreduce ...

  10. JQuery 表单校验插件 validate 使用纪录

    JS诞生其中一个目的就是将, 服务器端的校验在客户端提前完成, 以避免用户提交数据后, 后台校验报错的糟糕用户体验. 基于JQuery库的有很多优秀的插件, 其中对于浏览器端表单进行验证的基本功能也有 ...