Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。
Input 输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。
Output 对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。
Sample Input 1 100 0 0
Sample Output 80 |
题意就是让你求一个区间内一共有多少个不吉利的数字(不吉利的数字就是包含4或者62的数)。这个题练习使用板子的就是先写个记忆化搜索再做差求区间内的符合种数。还是很好理解的而且不需要考虑前导零。
#include <iostream>
#include <cstdio>
#include <set>
#include <map>
#include <algorithm>
#include <string.h>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
const long long int inf=1e9+7;
int pos[20];
int dp[20][3];
int dfs(int length,bool limit,bool zhuang){
if(length<1)
return 1;
if(!limit&&dp[length][zhuang]!=-1)return dp[length][zhuang];
int ma=limit?pos[length]:9;
int ans=0;
for(int i=0;i<=ma;i++){
if(i==4)
continue;
if(i==2&&zhuang)
continue;
ans+=dfs(length-1,limit&&i==pos[length],i==6);
}
if(!limit)dp[length][zhuang]=ans;
return ans;
}
int solve(int m){
int length=0;
while(m){
pos[++length]=m%10;
m/=10;
}
return dfs(length,1,0);
}
int main(){
int m,n;
while(cin>>n>>m,n,m){
memset(dp,-1,sizeof(dp));
cout<<solve(m)-solve(n-1)<<endl;
}
}