zoukankan      html  css  js  c++  java
  • Bomb(hdu 3555)

    题意:给定一个闭区间,求区间内有多少数中含“49”

    /*
      dp[i][j]表示i位数以j为最高位位中的所有不符合数的个数。
      然后把数字拆分,乱搞即可。
    */
    #include<cstdio>
    #include<iostream>
    #define lon long long
    using namespace std;
    lon dp[25][12];
    void init(){
        dp[0][0]=1;
        for(int i=1;i<=20;i++)
            for(int j=0;j<=9;j++)
                for(int k=0;k<=9;k++)
                    if(!(j==4&&k==9))
                        dp[i][j]+=dp[i-1][k];
    }
    lon solve(lon n){
        int a[25],len=0;
        while(n){
            a[++len]=n%10;
            n/=10;
        }
        a[len+1]=0;
        lon ans=0;
        for(int i=len;i;i--){
            for(int j=0;j<a[i];j++)
                if(!(a[i+1]==4&&j==9))
                    ans+=dp[i][j];
            //当高位出现49时,低位就不用再计算了
            if(a[i]==9&&a[i+1]==4) break;
        }
        return ans;
    }
    int main(){
        init();
        int T;scanf("%d",&T);
        while(T--){
            lon x;
            scanf("%I64d",&x);
            printf("%I64d
    ",x+1-solve(x+1));
        }
        return 0;
    }
  • 相关阅读:
    计算机组成原理学习总纲图
    USE RED
    既有的问题如何解决
    字符串极值题解
    扩展 KMP
    KMP
    FHQ-Treap
    STL
    iOS内存管理理论知识过一遍
    iOS中Block理论知识过一遍
  • 原文地址:https://www.cnblogs.com/harden/p/6288022.html
Copyright © 2011-2022 走看看