zoukankan      html  css  js  c++  java
  • 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; }



  • 相关阅读:
    LeetCode120 Triangle
    LeetCode119 Pascal's Triangle II
    LeetCode118 Pascal's Triangle
    LeetCode115 Distinct Subsequences
    LeetCode114 Flatten Binary Tree to Linked List
    LeetCode113 Path Sum II
    LeetCode112 Path Sum
    LeetCode111 Minimum Depth of Binary Tree
    Windows下搭建PHP开发环境-WEB服务器
    如何发布可用于azure的镜像文件
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5101982.html
Copyright © 2011-2022 走看看