度熊全是由1构成的字符串

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

1≤N≤2001≤N≤200

Output对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。Sample Input

1
3
5

Sample Output

1
3
8

Hint

如果序列是:(111)。可以构造出如下三个新序列:(111), (21), (12)。
#include<stdio.h>
#include<string>
#include<string.h>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;

//compare比较函数:相等返回0,大于返回1,小于返回-1
int compare(string str1,string str2)
{
    if(str1.length()>str2.length()) return 1;
    else if(str1.length()<str2.length())  return -1;
    else return str1.compare(str2);
}
//高精度加法
//只能是两个正数相加
string add(string str1,string str2)//高精度加法
{
    string str;
    int len1=str1.length();
    int len2=str2.length();
    //前面补0,弄成长度相同
    if(len1<len2)
    {
        for(int i=1;i<=len2-len1;i++)
           str1="0"+str1;
    }
    else
    {
        for(int i=1;i<=len1-len2;i++)
           str2="0"+str2;
    }
    len1=str1.length();
    int cf=0;
    int temp;
    for(int i=len1-1;i>=0;i--)
    {
        temp=str1[i]-‘0‘+str2[i]-‘0‘+cf;
        cf=temp/10;
        temp%=10;
        str=char(temp+‘0‘)+str;
    }
    if(cf!=0)  str=char(cf+‘0‘)+str;
    return str;
}
//高精度减法
//只能是两个正数相减,而且要大减小
string sub(string str1,string str2)//高精度减法
{
    string str;
    int tmp=str1.length()-str2.length();
    int cf=0;
    for(int i=str2.length()-1;i>=0;i--)
    {
        if(str1[tmp+i]<str2[i]+cf)
        {
            str=char(str1[tmp+i]-str2[i]-cf+‘0‘+10)+str;
            cf=1;
        }
        else
        {
            str=char(str1[tmp+i]-str2[i]-cf+‘0‘)+str;
            cf=0;
        }
    }
    for(int i=tmp-1;i>=0;i--)
    {
        if(str1[i]-cf>=‘0‘)
        {
            str=char(str1[i]-cf)+str;
            cf=0;
        }
        else
        {
            str=char(str1[i]-cf+10)+str;
            cf=1;
        }
    }
    str.erase(0,str.find_first_not_of(‘0‘));//去除结果中多余的前导0
    return str;
}
//高精度乘法
//只能是两个正数相乘
string mul(string str1,string str2)
{
    string str;
    int len1=str1.length();
    int len2=str2.length();
    string tempstr;
    for(int i=len2-1;i>=0;i--)
    {
        tempstr="";
        int temp=str2[i]-‘0‘;
        int t=0;
        int cf=0;
        if(temp!=0)
        {
            for(int j=1;j<=len2-1-i;j++)
              tempstr+="0";
            for(int j=len1-1;j>=0;j--)
            {
                t=(temp*(str1[j]-‘0‘)+cf)%10;
                cf=(temp*(str1[j]-‘0‘)+cf)/10;
                tempstr=char(t+‘0‘)+tempstr;
            }
            if(cf!=0) tempstr=char(cf+‘0‘)+tempstr;
        }
        str=add(str,tempstr);
    }
    str.erase(0,str.find_first_not_of(‘0‘));
    return str;
}

const int MAXNX = 200 + 5;
string C[MAXNX];
void init(){
    C[0] = "0";
    C[1] = "1";
    for(int i = 2;i < MAXNX;i ++) C[i] = add(C[i - 1], C[i - 2]);
}

int N;
int main() {
    init();
    while(~scanf("%d", &N)){
        cout << C[N + 1] << endl;
    }
    return 0;
}
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 string s[201];
 6 string add(string a,string b)
 7 {
 8     string ans="";
 9     int aa[1000]={0},bb[1000]={0};
10     int aLen=a.size();
11     int bLen=b.size();
12     int MaxLen=max(aLen,bLen);
13     for(int i=0;i<aLen;i++)
14         aa[aLen-i-1]=a[i]-‘0‘;
15     for(int i=0;i<bLen;i++)
16         bb[bLen-1-i]=b[i]-‘0‘;
17     for(int i=0;i<MaxLen;i++){
18         aa[i]+=bb[i];
19         aa[i+1]+=aa[i]/10;
20         aa[i]%=10;
21     }
22     if(aa[MaxLen]) MaxLen++;
23     for(int i=MaxLen-1;i>=0;i--)
24         ans+=aa[i]+‘0‘;
25     return ans;
26 }
27 int main()
28 {
29     int n;
30     s[0]="1",s[1]="1";
31     for(int i=2;i<201;i++){
32         s[i]=add(s[i-1],s[i-2]);
33     }
34     while(cin>>n){
35         cout<<s[n]<<endl;
36     }
37     return 0;
38 }
时间: 2024-10-11 05:28:23

度熊全是由1构成的字符串的相关文章

JAVA----编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符

package com.pb.demo.packclass.demo1; import java.util.HashSet; /** * 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符 例如: 原始字符串是"abc",打印得到下列所有组合情况 "a" "b" "c" "ab" "bc" "ca" "ba" "cb"

九度1535 重叠的最长字串 字符串哈希

题目描述: 给定两个字符串,求它们前后重叠的最长子串的长度,比如"abcde"和"cdefg"是"cde",长度为3. 输入: 输入可能包含多个测试案例. 对于每个测试案例只有一行, 包含两个字符串.字符串长度不超过1000000,仅包含字符'a'-'z'. 输出: 对应每个测试案例,输出它们前后重叠的最长子串的长度. 样例输入: abcde cdefg 样例输出: 3 #include <iostream> #include <

5Python全栈之路系列之字符串格式化

Python全栈之路系列之字符串格式化 This PEP proposes a new system for built-in string formatting operations, intended as a replacement for the existing '%' string formatting operator. Python目前提供的字符串格式化方式有两种: 百分号方式 format方式 这两种方式在Python2和Python3中都适用,百分号方式是Python一直内置

百度之星2017初赛A-1006-度度熊的01世界

度度熊的01世界 Accepts: 967 Submissions: 3064 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成. 现在给你一个n*m的图像,你需要分辨他究竟是0,还是1,或者两者均不是. 图像0的定义:存在1字符且1字符只能是由一个连通块组成,存在且

Python 全栈开发二 python基础 字符串 字典 集合

一.字符串 1,在python中,字符串是最为常见的数据类型,一般情况下用引号来创建字符串. 1 >>ch = "wallace" 2 >>ch1 = 'wallace' 3 >>ch2 = ''' 4 wallace 5 wallace 6 wallace 7 ''' 8 #以上三种引号都可以定义一字符串, 9 #三引号定义的字符串可以换行 注意:字符串是不可变的数据类型,关于可变与不可变将会在后文解释. 2,转义字符 在python中有一些字符是

Python3基础 str casefold 返回全是小写字母的新字符串

? python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 conda : 4.5.11 type setting : Markdown ? code [email protected]:~$ source activate py37 (py37) [email protected]:~$ ipython Python 3.7.0 (default, Jun 28 2018, 13:15:42) Type 'copyright'

2016百度之星资格赛 Round1(2,3,4题)

Problem B Accepts: 2515 Submissions: 9216 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description 度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列. Input 这里包括多组测试数据,每组测

2016&quot;百度之星&quot; - 资格赛(Astar Round1)-(模拟+线段树+乘法逆元)

Problem A Accepts: 1351 Submissions: 9951 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description 度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串.现在麻烦来了,他忘记了原来的字符串都是什么,神奇的是他竟然记得原来那些字符串的哈希值.一个字符串的哈希值,由以下公式计算得到: H

字典树 - 神奇的字典

Description 度熊手上有一本神奇的字典,你可以在它里面做如下三个操作:   1.insert : 往神奇字典中插入一个单词   2.delete: 在神奇字典中删除所有前缀等于给定字符串的单词   3.search: 查询是否在神奇字典中有一个字符串的前缀等于给定的字符串 Input 这里仅有一组测试数据.第一行输入一个正整数N (1 <= N <= 100000),代表度熊对于字典的操作次数,接下来N行,每行包含两个字符串,中间中用空格隔开.第一个字符串代表了相关的操作(包括: i