南大计算机第一题
#include "bits/stdc++.h"
using namespace std;
int p[10];
int n, m;
int dfs(int pos, int pre, int cur) { //pos:从低位到高位的第pos位;pre:前一位的数字;cur:前面已选的数字表示的数字大小
if(pos<0) return cur>=max(n,10)&&cur<=m;
if(cur>m) return 0; //可忽略的小剪枝
int result=0;
if(!cur) { //如果前面都是0,则这一位随便取
for(int i=0; i<=9; ++i) result+=dfs(pos-1,i,cur+i*p[pos]);
}
else {
if(pre>0) result+=dfs(pos-1,pre-1,cur+(pre-1)*p[pos]);
if(pre<9) result+=dfs(pos-1,pre+1,cur+(pre+1)*p[pos]);
}
return result;
}
int main() {
p[0]=1; for(int i=1; i<=8; ++i) p[i]=10*p[i-1];
int T; scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &m);
printf("%d\n", dfs(8,0,0));
}
}