分析
显然可以转化为两个区间的差值,也就是没有下界只有上界
于是用记忆化搜索(比较好理解)或者直接DP,设 f[pos][i][j]f[pos][i][j]f[pos][i][j] 表示填到第pos位,现在这一位是 iii ,上一位是 jjj 。
但是这道题直接枚举区间所有数也可以过掉。。非常舒服。
上代码
暴力出奇迹
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,cnt;
int a[10];
int main()
{
cin>>n>>m;
while(!(n==0&&m==0))
{
cnt=0;
for(int i=n;i<=m;i++)
{
int x=i,j=0;
while(x)
{
a[++j]=x%10;
x/=10;
if(a[j]==4||(a[j]==6&&a[j-1]==2))
{
cnt++;
//cout<<i<<' ';
break;
}
}
}
cout<<m-n+1-cnt<<endl;
cin>>n>>m;
}
return 0;
}