不要62
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有4或62的号码。例如:
62315 73418 88914
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有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
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #include<queue> 7 #include<stack> 8 #include<deque> 9 #include<map> 10 #include<iostream> 11 using namespace std; 12 typedef long long LL; 13 const double pi=acos(-1.0); 14 const double e=exp(1); 15 const int N = 1000100; 16 17 #define lson i << 1,l,m 18 #define rson i << 1 | 1,m + 1,r 19 20 int dp[15][15],d[15]; 21 22 void init() 23 { 24 int i,j,k; 25 dp[0][0]=1; 26 for(i=1; i<=9; i++) 27 for(j=0; j<=9; j++) 28 for(k=0; k<=9; k++) 29 if((j==6&&k==2)||j==4) 30 ; 31 else 32 dp[i][j]+=dp[i-1][k]; 33 } 34 int solve(int n) 35 { 36 int ans=0; 37 int len=0; 38 while(n) 39 { 40 ++len; 41 d[len]=n%10; 42 n=n/10; 43 } 44 d[len+1]=0; 45 d[len+2]=0; 46 for(int i=len; i>=1; --i) 47 { 48 if(d[i+1]==4||(d[i+2]==6&&d[i+1]==2)) 49 break; 50 for(int j=0; j<d[i]; j++) 51 if(j==4||(j==2&&d[i+1]==6)) 52 ; 53 else 54 ans+=dp[i][j]; 55 } 56 return ans; 57 } 58 int main() 59 { 60 61 int m,n; 62 int a,b; 63 init(); 64 while(scanf("%d%d",&m,&n)!=EOF) 65 { 66 if(m==0&&n==0) 67 break; 68 a=solve(n+1); 69 b=solve(m); 70 printf("%d\n",solve(n+1)-solve(m)); 71 } 72 return 0; 73 }