hdu-2089-不要62

来源:互联网 发布:python 绘制cdf图代码 编辑:程序博客网 时间:2024/06/07 14:18

杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。 
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。 
不吉利的数字为所有含有4或62的号码。例如: 
62315 73418 88914 
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。 
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。 
Input
输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。 
Output
对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。 
Sample Input
1 1000 0
Sample Output
80

数位dp。

f[i][j]:第i位的数字为j时数字的个数。

#include<cstdio>int n,m,f[8][12],ans1,ans2,dgs,d[10]={1,1,10,100,1000,10000,100000,1000000};int main(){int i,j,k;f[0][0]=1;for(i=1;i<=6;i++)for(j=0;j<=9;j++)if(j!=4)for(k=0;k<=9;k++)if(j!=6||k!=2) f[i][j]+=f[i-1][k];while(1){scanf("%d%d",&n,&m);if(!n&&!m) break;ans1=ans2=0;for(dgs=0,k=m;k;dgs++) k/=10;for(i=dgs;i>0;i--){for(j=0;j<(m/d[i])%10||(i==1&&j==m%10);j++)if(j!=4&&(j!=2||(m/d[i+1])%10!=6)) ans1+=f[i][j];if(((m/d[i])%10==4)||((m/d[i])%10==2&&(m/d[i+1])%10==6)) break;}for(i=dgs;i>0;i--){for(j=0;j<((n-1)/d[i])%10||(i==1&&j==(n-1)%10);j++)if(j!=4&&(j!=2||((n-1)/d[i+1])%10!=6)) ans2+=f[i][j];if((((n-1)/d[i])%10==4)||(((n-1)/d[i])%10==2&&((n-1)/d[i+1])%10==6)) break;}printf("%d\n",ans1-ans2);}}


原创粉丝点击