不要 62求调

杭州人称那些傻乎乎粘嗒嗒的人为 62(音:laoer)。

杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。

不吉利的数字为所有含有 44 或 6262 的号码。例如:62315,73418,8891462315,73418,88914 都属于不吉利号码。但是,6115261152 虽然含有 66 和 22,但不是 6262 连号,所以不属于不吉利数字之列。

你的任务是,对于每次给出的一个牌照区间号,推断出交管局今后又要实际上给多少辆新的士车上牌照了。

#include<iostream>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
const int N=10;
inline int read(){
   	int x=0,f=1;
   	char c=getchar();
   	while(c<'0'||c>'9'){
       	if(c=='-') f=-1;
       	c=getchar();
   	}
   	while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+c-'0',c=getchar();
   	return x*f;
}
inline int min(int a,int b){return (a<b ? a:b);}
inline int max(int a,int b){return (a>b ? a:b);}
inline int gcd(int a, int b){return (b==0 ? a : gcd(b,a%b));}
int f[N][N],a[N];
inline void init(){
	for(int i=0;i<=9;i++) f[1][i]=bool(i-4);
	for(int i=2;i<N;i++){
		for(int j=0;j<=9;j++){
			if(j==4) continue;
			for(int k=0;k<=9;k++){
				if(k==4 || (j==6)&&(k==2)) continue;
				f[i][j]+=f[i-1][k];
			}
		}
	}
}
inline int dp(int n){
	if(n==0) return 1;
	int cnt=0,res=0,last=0;
	while(n){
		a[++cnt]=n%10,n/=10;
	}
	for(int i=cnt;i>0;i--){
		for(int j=0;j<a[i];j++){
			if(j==4) continue;
			if(last==6 && j==2) continue;
			res+=f[i][j];
		}
		last=a[i];
		if(a[i]==4) break;
		if(i==1) res++;
	}
	return res;
}
signed main(){
	int m,n;
	init();
	while(1){
		cin>>m>>n;
		if(m==n && m==0) break;
		cout<<dp(n)-dp(m-1)<<'\n';
	}
	return 0;
}

WA29求调

漏了一个终止情况 , 上一个数是6,当前数是2的情况也要终止下一位的枚举

a[i]==6&&a[i+1]==2

同一题?同一天?