zoukankan      html  css  js  c++  java
  • [题解]计算在k进制下,1-x的数字里某一位的出现次数

    (x)代表数字范围在([1,n]), (tar)是要统计的数字, (k)是进制.

    #include <bits/stdc++.h>
    
    using namespace std;
    
    long long p[100];
    long long dig[100];
    long long tmp[100];
    
    long long dfs(long long pos, bool limit, bool lead0, long long k, long long tar, long long x)
    {
        if (pos == -1) return 0;
        if (!limit && !lead0 && tmp[pos] != -1) return tmp[pos];
        
        long long ret = 0;
        int up = limit ? dig[pos] : k-1;
        for (int i = 0; i <= up; ++i)
        {
            if (i == tar)
            {
                if (lead0 && i == 0)
                {
                    ret += dfs(pos-1, limit && i == up, lead0 && i == 0, k, tar, x);
                }else if(limit && i == up)
                {
                    ret += x % p[pos] + 1 + dfs(pos-1, limit && i == up, lead0 && i == 0, k, tar, x);
                }else{
                    ret += p[pos] + dfs(pos-1, limit && i == up, lead0 && i == 0, k, tar, x);
                }
            }else
                ret += dfs(pos-1, limit && i == up, lead0 && i == 0, k, tar, x);
        }
        if (!limit && !lead0) tmp[pos] = ret;
        return ret;
    }
    
    long long swdp(long long x, long long k, long long tar)
    {
        memset(tmp, -1, sizeof(tmp));
        int len = 0;
        long long _x = x;
    
        while (_x)
        {
            dig[len++] = _x%k;
            _x /= k;
        }
    
        p[0] = 1; for (int i = 1; i < len; ++i) p[i] = p[i-1] * k;
        
        return dfs(len-1, 1, 1, k, tar, x);
    }
    
    int main()
    {
        long long x, k, tar;
        scanf("%lld%lld%lld
    ", &x, &k, &tar);
        printf("%lld
    ", swdp(999999999, 10 ,1));
    }
    
  • 相关阅读:
    Spring Cloud
    Hibernate 缓存
    Spring 快速入门
    Junit 单元测试
    Spring Cloud 笔记
    Swagger SpringBoot 集成
    Apache Shiro 权限框架
    Spring Boot
    跨域问题
    BeX5 常见问题解决办法
  • 原文地址:https://www.cnblogs.com/zzidun-pavo/p/14182051.html
Copyright © 2011-2022 走看看