zoukankan      html  css  js  c++  java
  • 训练1-B

    杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。
    杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
    不吉利的数字为所有含有4或62的号码。例如:
    62315 73418 88914
    都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。
    你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。

    Input 输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。
    Output 对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。
    Sample Input
    1 100
    0 0
    Sample Output
    80
    //好吧,这是我抄的大佬的,此题暴力能过,不过这个算法我看了好久也没有搞懂,果然是大佬orz
    #include<stdio.h>           
    #include<string.h>
    using namespace std;
    int dp[10][10];
    int digit[10];
    void init()
    {
        //十位加个位dp,百位加十位dp,千位加百位dp
        dp[0][0]=1;
        for(int i=1;i<=7;i++)
        {
            for(int j=0;j<10;j++)//枚举第i位数上的数字、
            {
                for(int k=0;k<10;k++)//枚举第i-1位上的数字、
                {
                    if(!(j==6&&k==2)&&j!=4)//满足条件
                    dp[i][j]+=dp[i-1][k];
                }
            }
        }
    }
    int calchangdu(int n)
    {
        int cont=0;
        while(n)
        {
            cont++;
            n/=10;
        }
        return cont;
    }
    int caldigit(int n,int len)
    {
        memset(digit,0,sizeof(digit));
        for(int i=1;i<=len;i++)
        {
            digit[i]=n%10;
            n/=10;
        }
    }
    int solve(int n)//计算[0,n)符合条件的个数
    {
         int ans=0;
         int len=calchangdu(n);
         caldigit(n,len);
         for(int i=len;i>=1;i--)//从最高位开始枚举
         {
             for(int j=0;j<digit[i];j++)
             {
                 if(!(j==2&&digit[i+1]==6)&&j!=4)
                 {
                     ans+=dp[i][j];
                 }
             }
            if(digit[i]==4 || (digit[i]==2 && digit[i+1]==6))//第i位已经不满足条件,则i位以后都不可能满足条件,结束循环
                break ;
         }
         return ans;
    }
    int main()
    {
        init();
        int n,m;
        while(~scanf("%d%d",&n,&m))
        {
            if(n==0&&m==0)break;
            printf("%d
    ",solve(m+1)-solve(n));
        }
    }


  • 相关阅读:
    51Nod 1009 数字1的数量(思维)
    「CTSC 2008」祭祀
    「CSA Round #41」BFS-DFS
    「CEOI2008」order
    「HEOI 2016/TJOI 2016」求和
    「HAOI 2018」染色
    「CF 961G」Partitions
    「WC 2007」剪刀石头布
    「POI 2010」Bridges
    「CQOI 2014」危桥
  • 原文地址:https://www.cnblogs.com/aerer/p/9931069.html
Copyright © 2011-2022 走看看