• 【noip模拟赛3】编码


    描述

     

    AliceBob之间要进行秘密通信,他们正在讨论如何对信息进行加密:

    Alice不如采用一种很简单的加密方式:’A’替换成1’B’替换成2„„,’Z’替换成26

    Bob这种加密方式太傻了,Alice。如果我想要传送一个单词’BEAN’给你,它加密后就是25114。但你有很多种不同的方法来解密,从而得到许多单词!

    Alice你说的是没错,但是除了’BEAN’有意义以外,其他解密出来的’BEAAD’

    ’YAAD’’YAN’’YKD’’BEKD’都没有任何含义。

    Bob是的,但是同一个加密后的数字序列,可能的得到数以亿计的不同解密方案。

    Alice是吗?有这么多吗?

    你要帮助Bob编写一个程序,来说服Alice。对于一个加密后的数字序列,告诉她确切的解密方案数。

    输入

     

    有若干个加密后的数字序列,每行一个,行数不超过10,每行的数字数量不超过10000个。序列一定是符合要求的,例如没有先导的零和连续两个零等情况。数字间没有空格。一行一个零表示输入结束,这是不需要处理的。

    输出

     

    对于每个加密后的数字序列,输出一行。一个整数,表示解密的不同方案数。结果保证在32-bit带符号整数(longint)范围内。

    输入样例 1 

    25114 
    1111111111 
    3333333333 
    0 

    输出样例 1

    6 
    89 
    1


    很容易想到用dp做 但是我忽略了0 打好了交上去也全是wa。。
    只要在原dp加上!=0即可
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    using namespace std;
    //input
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m);
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s)
    #define LL long long
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    #define N 10000+5
    char a[N];
    int dp[N];
    int main()
    {
        while(RS(a+1),a[1]-'0')
        {
            CLR(dp,0);
            dp[0]=dp[1]=1;
            for(int i=2;a[i];i++)
            {
                if(a[i]-'0'!=0)
                    dp[i]=dp[i-1];
    
                if( (a[i-1]-'0')*10+a[i]-'0'<=26&&a[i-1]-'0'!=0 )
                    dp[i]+=dp[i-2];
            }
            printf("%d
    ",dp[strlen(a+1)]);
        }
    }











  • 相关阅读:
    RedisTemplate使用事务处理
    maven命令学习
    springboot学习地址
    Mycat实现读写分离
    springboot-异步线程调用
    java多线程ExecutorService
    IntelliJ Idea 常用快捷键列表
    springMVC请求处理过程
    记录一次面试题
    java面试题-java内存模型
  • 原文地址:https://www.cnblogs.com/bxd123/p/10500342.html
Copyright © 2020-2023  润新知