zoukankan      html  css  js  c++  java
  • CF -- Phone Number

    Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u

    []   [Go Back]   [Status]  

    Description

    Alas, finding one's true love is not easy. Masha has been unsuccessful in that yet. Her friend Dasha told Masha about a way to determine the phone number of one's Prince Charming through arithmancy.

    The phone number is divined like that. First one needs to write down one's own phone numbers. For example, let's suppose that Masha's phone number is12345. After that one should write her favorite digit from 0 to 9 under the first digit of her number. That will be the first digit of the needed number. For example, Masha's favorite digit is 9. The second digit is determined as a half sum of the second digit of Masha's number and the already written down first digit from her beloved one's number. In this case the arithmetic average equals to (2 + 9) / 2 = 5.5. Masha can round the number up or down, depending on her wishes. For example, she chooses the digit 5. Having written down the resulting digit under the second digit of her number, Masha moves to finding the third digit in the same way, i.e. finding the half sum the the third digit of her number and the second digit of the new number. The result is (5 + 3) / 2 = 4. In this case the answer is unique. Thus, every i-th digit is determined as an arithmetic average of the i-th digit of Masha's number and the i - 1-th digit of her true love's number. If needed, the digit can be rounded up or down. For example, Masha can get:

    12345
    95444
    Unfortunately, when Masha tried dialing the number, she got disappointed: as it turned out, the number was unavailable or outside the coverage area. But Masha won't give up. Perhaps, she rounded to a wrong digit or chose the first digit badly. That's why she keeps finding more and more new numbers and calling them. Count the number of numbers Masha calls. Masha calls all the possible numbers that can be found by the described means of arithmancy, except for, perhaps, her own one.

    Input

    The first line contains nonempty sequence consisting of digits from 0 to 9 — Masha's phone number. The sequence length does not exceed 50.

    Output

    Output the single number — the number of phone numbers Masha will dial.

    Sample Input

    Input
    12345
    Output
    48
    Input
    09
    Output
    15
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std ;
    
    long long dp[52][10] ;
    int map[54];
    char s[52] ;
    
    int main()
    {
        int n , mun  , i , j;
        //freopen("in.txt","r",stdin) ;
        //freopen("oo.txt","w",stdout) ;
        while( scanf("%s",s) != EOF )
        {
            n = strlen(s) ;
            map[0] = s[0]-'0' ;
            for( i = 1 ; i < n ;i++ )
            {
                map[i] = s[i]-'0' ;
            }
            memset(dp,0,sizeof(dp)) ;
            for( i = 0 ; i <= 9 ;i++ ){
                dp[0][i] = 1 ;
            }
            for( j = 1 ; j < n ;j++ )
            {
                for( i = 0 ; i <= 9 ;i++ )
              {
                if(i*2-1-map[j]>=0 &&i*2-1-map[j] <= 9)dp[j][i] += dp[j-1][i*2-1-map[j]] ;
                if(i*2-map[j]>=0 &&i*2-map[j]<=9 )dp[j][i] += dp[j-1][i*2-map[j]] ;
                if(i*2+1-map[j]<=9 &&i*2+1-map[j] >=0 )dp[j][i] += dp[j-1][i*2+1-map[j]] ;
              }
            }
            long long  ans = 0 ;
            for( i = 0 ; i <= 9 ;i++ )
               ans += dp[n-1][i] ;
    
        int *a = map ;
        bool flag = 1 ;
        int pre = a[0] ;
        for(int i=1; i< n; i++){
            int t = pre + a[i] ;
            if(t % 2 == 1){
                if(t / 2 != a[i] && t / 2 + 1 != a[i])  flag = 0 ;
            }else{
                if(t / 2 != a[i])   flag = 0 ;
            }
            pre = a[i] ;
        }
        if(flag){ ans-- ; }
            cout << ans << endl ;
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    笔记本无线网卡和有线网卡同时用及网络知识回顾总结
    DSPack初次使用小结
    常见加解密算法及Delphi应用程序图标总结
    Delphi窗体创建释放过程及单元文件小结
    怪异的JavaScript的Case语句
    交换机与路由器的区别
    DirectShow学习笔记总结
    Git的提交与查看差异
    Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
    laravel5的Bcrypt加密方式对系统保存密码的小结
  • 原文地址:https://www.cnblogs.com/20120125llcai/p/3292653.html
Copyright © 2011-2022 走看看