• POJ 3340 & HDU 2410 Barbara Bennett's Wild Numbers(数学)


    题目链接:

    PKU:http://poj.org/problem?id=3340

    HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2410


    Description

    wild number is a string containing digits and question marks (like 36?1?8). A number X matches a wild number W if they have the same length, and every non-question mark character in X is equal to the character in the same position in W (it means that you can replace a question mark with any digit). For example, 365198 matches the wild number 36?1?

    8, but 360199, 361028, or 36128 does not. Write a program that reads a wild number W and a number X from input, both of length n, and determines the number of n-digit numbers that match W and are greater than X.

    Input

    There are multiple test cases in the input. Each test case consists of two lines of the same length. The first line contains a wild number W, and the second line contains an integer number X. The length of input lines is between 1 and 10 characters. The last line of input contains a single character #.

    Output

    For each test case, write a single line containing the number of n-digit numbers matching W and greater than X (n is the length of W and X).

    Sample Input

    36?

    1?

    8 236428 8?3 910 ? 5 #

    Sample Output

    100
    0
    4
    

    Source



    题意:

    给出两个数字字符串,串一中有'?',问在‘?’位置填数字共同拥有多少中填法,保证串一大于串二!


    代码例如以下:

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    const int maxn = 17;
    typedef __int64 LL;
    int cont;
    LL ans;
    char s1[maxn];
    char s2[maxn];
    LL POW(LL n, LL k)
    {
        LL s = 1;
        for(LL i = 0; i < k; i++)
        {
            s*=n;
        }
        return s;
    }
    void solve(int len, int k)
    {
        for(int i = 0; i < len; i++)
        {
            if(s1[i] == '?

    ') { ans+=(9-(s2[i]-'0'))*POW(10,--cont); } else if(s1[i] < s2[i]) return ; else if(s1[i] > s2[i]) { ans+=POW(10,cont); return ; } } } int main() { while(~scanf("%s",s1)) { ans = 0; cont = 0; if(s1[0] == '#') break; scanf("%s",s2); int len = strlen(s1); for(int i = 0; i < len; i++) { if(s1[i] == '?') cont++; } solve(len,0); printf("%I64d ",ans); } return 0; }



  • 相关阅读:
    css-使不同大小的图片在固定大小的容器中居中
    js-数组中查找特定元素并返回所有该元素的索引
    js-权威指南学习笔记5
    js-权威指南学习笔记4
    js-权威指南学习笔记3
    JavaScript中的类型转换
    js-权威指南学习笔记2
    通过维基API实现维基百科查询功能
    【代码笔记】iOS-FMDBDemo
    【代码笔记】iOS-自定义switch
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5101982.html
Copyright © 2020-2023  润新知