zoukankan      html  css  js  c++  java
  • HDU 2089 数位dp/字符串处理 两种方法

    不要62

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 34525    Accepted Submission(s): 12493


    Problem Description
    杭州人称那些傻乎乎粘嗒嗒的人为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
     
    Author
    qianneng
     
    Source
     
    题意:对于每个整数对,输出不含有不吉利数字“62”,“4”的统计个数
     
    题解:数位dp处理
    dp[i][2]  长度为i 含有不吉利数字的个数
    dp[i][1]  长度为i 不含有不吉利数字但是高位的数字为“2”的个数
    dp[i][0]  长度为i 不含有不吉利数字的个数
    dp[i][2]=10*dp[i-1][2]+dp[i-1][1]+dp[i-1][0];//含有 考虑当前i位为“4” “6”
    dp[i][1]=dp[i-1][0];
    dp[i][0]=9*dp[i-1][0]-dp[i-1][1];//不含有考虑i位为“6”
     
     
     1 /******************************
     2 code by drizzle
     3 blog: www.cnblogs.com/hsd-/
     4 ^ ^    ^ ^
     5  O      O
     6 ******************************/
     7 //#include<bits/stdc++.h>
     8 #include<iostream>
     9 #include<cstring>
    10 #include<cstdio>
    11 #include<map>
    12 #include<algorithm>
    13 #include<queue>
    14 #define ll __int64
    15 using namespace std;
    16 int n,m;
    17 int dp[10][10];
    18 void init()
    19 {
    20     memset(dp,0,sizeof(dp));
    21     dp[0][0]=1;
    22     for(int i=1;i<=8;i++)
    23     {
    24         dp[i][2]=10*dp[i-1][2]+dp[i-1][1]+dp[i-1][0];//
    25         dp[i][1]=dp[i-1][0];
    26         dp[i][0]=9*dp[i-1][0]-dp[i-1][1];//没有
    27     }
    28 }
    29 int fun(int ex)
    30 {
    31     int a[10];
    32     memset(a,0,sizeof(a));
    33     int len=1;
    34     int ans=0;
    35     int flag=0;
    36     int exm=ex; 
    37     int last=0;
    38     while(ex)
    39     {
    40         a[len]=ex%10;
    41         len++;
    42         ex/=10;
    43     }
    44     for(int i=len-1;i>=1;i--)
    45     {
    46        ans=ans+a[i]*dp[i-1][2];
    47        if(flag)
    48         ans=ans+a[i]*dp[i-1][0];
    49        else
    50        {
    51            if(a[i]>4)
    52             ans=ans+dp[i-1][0];
    53            if(a[i]>6)
    54             ans=ans+dp[i-1][1];
    55            if(a[i+1]==6&&a[i]>2)
    56             ans=ans+dp[i][1];
    57        }
    58        if(a[i]==4||(last==6&&a[i]==2))
    59                flag=1;
    60        last=a[i];
    61     }
    62     return exm-ans;
    63 }
    64 int main()
    65 {
    66     init();
    67     while(scanf("%d %d",&n,&m)!=EOF)
    68     {
    69         if(n==0&&m==0)
    70             break;
    71         printf("%d
    ",fun(m+1)-fun(n));
    72     }
    73     return 0;
    74 }
     
     字符串处理
    itoa()处理 最新的codeblocks不能编译成功 devc++编译成功
    将整型转化为字符型 使用strstr()函数
     1 /******************************
     2 code by drizzle
     3 blog: www.cnblogs.com/hsd-/
     4 ^ ^    ^ ^
     5  O      O
     6 ******************************/
     7 #include<bits/stdc++.h>
     8 using namespace std;
     9 char a[10];
    10 int b[1000005];
    11 int visited[1000005];
    12 int main()
    13 {
    14     int n,re,m;
    15     memset(visited,0,sizeof(visited));
    16     for(int i=1; i<=1000000; i++)
    17     {
    18         memset(a,0,sizeof(a));
    19         itoa(i,a,10);
    20         if(strstr(a,"62")==NULL&&strstr(a,"4")==NULL)
    21         {
    22             re++;
    23             visited[i]=1;
    24         }
    25         b[i]=re;
    26     }
    27     while(cin>>n>>m)
    28     {
    29         if(n==0&&m==0)
    30             break;
    31         if(visited[n]==1)
    32             cout<<b[m]-b[n]+1<<endl;
    33         else
    34             cout<<b[m]-b[n]<<endl;
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    前端基础 — BOM和DOM
    JavaScript概述
    前端知识 — HTML内容、CSS基础
    数据库MySQL
    jquery ajax() 方法使用
    移动端自适应的问题及解决
    jquery appendTo 和 append 的用法
    css 截取文字
    电脑模拟手机工具
    jquery 旋转插件jqueryrotate
  • 原文地址:https://www.cnblogs.com/hsd-/p/5756974.html
Copyright © 2011-2022 走看看