题目描述
在信息课上,小W学习到了进制。
他知道了原来数不仅可以表示成十进制,还可以表示成二进制,八进制,十六进制,甚至是二十进制,三十进制都可以。而且它们都有一个相同的运算规则:逢M进一,例如:二进制逢二进一,八进制逢八进一。因此,M进制数中每一位上的数可以用0~M-1来表示,即二进制数中只有0和1两种数字,八进制数中有0,1,2…7共八种数字。但是若M大于10时,大于等于10的数字用大写字母表示,例如十六进制数中有0,1,2…9,A…F共16种数字。
现在老师给出 n n n个任意进制数,要求统计出 n n n个数中合法的M进数的个数。
输入描述
第一行,有两个整数 n n n和 m m m, n ≤ 100000 n\leq100000 n≤100000, m ≤ 36 m\leq36 m≤36。分别表示任意进制数的个数和M进制。
接下来有 n n n行,每行一个由数字和大写字母构成的任意进制数,位数小于 50 \textsf{50} 50。
输出描述
输出 n n n个任意进制数中,合法的 m m m进制数的个数。
输入样例
5 16
102
AFF
5A
890
5S
输出样例
4
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
bool check (string s) {
for (int i=0;i<s.size();i++) {
if (s[i]>='0' && s[i]<='9' && s[i]>=m+'0') return false;
if (s[i]>='A' && s[i]<='Z' && s[i]-55>=m) return false;
}
return true;
}
signed main () {
cin>>n>>m;
int ans=0;
for (int i=1;i<=n;i++) {
string s;
cin>>s;
if (check (s)) ans++;
}
cout<<ans;
return 0;
}