zoukankan      html  css  js  c++  java
  • AcWing 338. 计数问题 数位dp

    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    using namespace std;
    
    const int N = 10;
    
    /*
    
    001~abc-1, 999
    
    abcxegf
        1. num[i] < x, 0
        2. num[i] == x, 0~efg
        3. num[i] > x, 0~999
    
    */
    
    int get(vector<int> num, int l, int r) {//求前面这些位组成的数字是多少
        int res = 0;
        for (int i = l; i >= r; i -- ) res = res * 10 + num[i];
        return res;
    }
    
    int power10(int x) {//求10的i次方
        int res = 1;
        while (x -- ) res *= 10;
        return res;
    }
    
    int count(int n, int x) {//1到n当中,x出现的次数
        if (!n) return 0;
        vector<int> num;//每一位
        while (n) {
            num.push_back(n % 10);
            n /= 10;
        }
        n = num.size();
        int res = 0;
        for (int i = n - 1 - !x ; i >= 0; i -- ) {
            //判断是否是在枚举最高位
            if (i < n - 1) {
                //            i前面所有这些位数
                res += get(num, n - 1, i + 1) * power10(i);
                if (!x) res -= power10(i);
            }
            if (num[i] == x) res += get(num, i - 1, 0) + 1;
            else if (num[i] > x) res += power10(i);
        }
    
        return res;
    }
    
    int main() {
        int a, b;
        while (cin >> a >> b , a) {
            if (a > b) swap(a, b);
    
            for (int i = 0; i <= 9; i ++ )
                cout << count(b, i) - count(a - 1, i) << ' ';
            cout << endl;
        }
    
        return 0;
    }
  • 相关阅读:
    Creative Cloud 无法连接问题
    HTTP_PROXY
    <video> controlsList
    Electron 问题
    含神经网络的离线AI翻译 APP

    (转载)移动Web开发技巧汇总
    2014年总结
    转载(web app变革之rem)
    火狐不支持backgroundPosition的js插件
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11909443.html
Copyright © 2011-2022 走看看