首页 > 代码库 > ZZNU 1993: cots' friends
ZZNU 1993: cots' friends
题目描述
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比较重要的人的个数.
样例输入21 1099 105样例输出103提示对于第二组样例: 只有编号为99 100 101的朋友是cot心中比较重要的人.
题目链接:http://acm.zznu.edu.cn/problem.php?id=1993
**********************************************
题意:给出你两个数,输出在这两个数之间只由两个数字组成的数的个数。
分析:直接判断之间的数会超时。所以把由两个数字组成且在范围之类的数字存入数组,再判断数组里有那哪几个数。
AC代码:
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstring> 5 #include<limits.h> 6 #include <cmath> 7 #include <cstdlib> 8 #include <stack> 9 #include <vector>10 #include <queue>11 #include <map>12 13 using namespace std;14 15 #define N 200000016 #define INF 0x3f3f3f3f17 #define met(a, b) memset (a, b, sizeof (a))//// met (dist, -1);18 19 int a[N],n,l,r;20 21 void dfs(int x,int y,int z)22 {23 if(z>=l&&z<=r)24 a[n++]=z;25 if(z*10+x<=r&&(z!=0||x!=0))26 dfs(x,y,z*10+x);27 if(z*10+y<=r&&(z!=0||y!=0))28 dfs(x,y,z*10+y);29 }30 31 int main()32 {33 int T,i,j;34 35 scanf("%d", &T);36 37 while(T--)38 {39 n=0;40 scanf("%d %d", &l,&r);41 if(l>r)42 swap(l,r);43 44 for(i=0;i<=9;i++)45 for(j=i+1;j<=9;j++)46 dfs(i,j,0);47 48 sort(a,a+n);49 n=unique(a,a+n)-a;50 printf("%d\n", n);51 }52 return 0;53 }
ZZNU 1993: cots' friends
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。