题目描述

cot 最近非常喜欢数字, 喜欢到了什么程度呢, 已经走火入魔了....

cot把每个朋友编上一个序号,然后遇到谁就叫"XX号",对此,他的朋友们一致认为cot"制杖"...

cot对朋友编号也是有原因的, 他不会对朋友随便编一个号. cot的朋友实在是太多了, 为此,cot研习了一种数字叫做 "XX数", 这个数字的规则是这样的:

一个数叫做"XX数",当且仅当存在两个数 a,b (0<=a,b<=9) 使得这个数的每一位只包含a或b.(a和b出现的次数为自然数)

如果cot认为这个朋友对他比较重要,那么cot就会给这个朋友编个"XX数"的序号.

现在cot给出一个编号区间,让作为好朋友的kog去计算在这个编号区间中有多少个人是cot心中比较重要的人? 但是作为cot的好朋友之一kog被cot恶心到了, 于是把这个问题甩给了你....

输入

输入包含一个数T(1<=T<=100), 代表测试数据的组数. 每组数据包含两个数 l, r.(1<=l,r<=10^8)(数据保证l,r形成的区间长度大于0).

输出

对于每组数据,输出在这个区间中对cot比较重要的人的个数.

样例输入

样例输出

提示
对于第二组样例: 只有编号为99 101的朋友是cot心中比较重要的人.

题目链接:http://acm.zznu.edu.cn/problem.php?id=1993

**********************************************

题意:给出你两个数,输出在这两个数之间只由两个数字组成的数的个数。

分析:直接判断之间的数会超时。所以把由两个数字组成且在范围之类的数字存入数组,再判断数组里有那哪几个数。

AC代码:

 #include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include<limits.h>
#include <cmath>
#include <cstdlib>
#include <stack>
#include <vector>
#include <queue>
#include <map> using namespace std; #define N 2000000
#define INF 0x3f3f3f3f
#define met(a, b) memset (a, b, sizeof (a))//// met (dist, -1); int a[N],n,l,r; void dfs(int x,int y,int z)
{
if(z>=l&&z<=r)
a[n++]=z;
if(z*+x<=r&&(z!=||x!=))
dfs(x,y,z*+x);
if(z*+y<=r&&(z!=||y!=))
dfs(x,y,z*+y);
} int main()
{
int T,i,j; scanf("%d", &T); while(T--)
{
n=;
scanf("%d %d", &l,&r);
if(l>r)
swap(l,r); for(i=;i<=;i++)
for(j=i+;j<=;j++)
dfs(i,j,); sort(a,a+n);
n=unique(a,a+n)-a;
printf("%d\n", n);
}
return ;
}
05-02 23:38