#147. bin

bin

进制数合法性判断

【题目描述】

在信息学课上,楠楠学习了进制数。他知道了原来数不仅可以表示成十进制,还可以表示成二进制、八进制、十六进制,甚至是二十进制、三十进制都可以。而且它们都有一个相同的运算规则:逢 M 进一,例如二进制逢二进一,八进制逢八进一。

因此,M 进制数中每一位上的数可以用 0~M-1 来表示,即:

  • 二进制数中只有 0 和 1 两种数字
  • 八进制数中有 0,1,2…7 共八种数字

但是若 M 大于 10 时,大于等于 10 的数字用大写字母表示,例如十六进制数中有 0,1,2…9,A…F 共 16 种数字。

现在老师给出 N 个任意进制数,要求统计出 N 个数中合法的 M 进制数的个数。

【输入格式】

输入数据有多行。 第一行有两个整数 N(1N1000001 \le N \le 100000)和 M(2M362 \le M \le 36),分别表示任意进制数的个数和 M 进制。 接下来有 N 行,每行一个由数字和大写字母构成的任意进制数,位数小于 50。

【输出格式】

输出 N 个任意进制数中,合法的 M 进制数的个数。

【输入样例】

5 16
102
AFF
5A
890
5S

【输出样例】

4

【样例解释】

因为 "5S"S 不是 16 进制数的合法数字,故只有 4 个合法的 16 进制数。

【数据范围与提示】

  • 对于 30% 的数据,N10N \le 10
  • 对于另外 30% 的数据,M20M \le 20
  • 对于 100% 的数据,N100000N \le 1000002M362 \le M \le 36,每行位数 <50< 50

文件io提醒

#include <cstdio>
#include ...

...

int main() {
  freopen("bin.in", "r", stdin);
  freopen("bin.out", "w", stdout);

  // 在这里开始编写你的代码

  return 0;
}