题目描述
这一天,TT因为疫情在家憋得难受,在云吸猫一小时后,TT决定去附近自家的山头游玩。
TT来到一个小湖边,看到了许多在湖边嬉戏的鸭子,TT顿生羡慕。此时他发现每一只鸭子都不一样,或羽毛不同,或性格不同。TT在脑子里开了一个map<鸭子,整数> tong,把鸭子变成了一些数字。现在他好奇,有多少只鸭子映射成的数的数位中不同的数字个数小于k。
输入描述
输入第一行包含两个数n,k,表示鸭子的个数和题目要求的k。
接下来一行有n个数,
a
i
a_i
ai,每个数表示鸭子被TT映射之后的值。 输出描述 输出一行,一个数,表示满足题目描述的鸭子的个数。
无行末空格
样例输入
6 5
123456789 9876543210 233 666 1 114514
样例输出
4
数据组成
数据点 | n | k | a i a_i ai |
---|---|---|---|
1 | n<=1000 | k=10 | 1 0 6 10^6 106 |
2 | n<=1000 | k=1 | 1 0 6 10^6 106 |
3,4,5 | n<= 1 0 5 10^5 105 | k<=100 | 1 0 9 10^9 109 |
6,7,8,9,10 | n<= 1 0 6 10^6 106 | k<= 1 0 6 10^6 106 | 1 0 15 10^{15} 1015 |
解体思路
本题中给定两个数n,k,统计接下来输入的n个数中,一个数中出现的数字个数小于k的数的个数。
为了处理方便,我们把输入的每个数当作字符串处理,统计字符串中不同字符的个数,如果小于k,计数加一,最后输出总计数即可。
程序源码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>
using namespace std;
int main() {
std::ios::sync_with_stdio(false); //加上就不会TLE啦
std::cin.tie(0);
int n, k;
cin >> n >> k; //获取n,k
int count = 0;
for (int i = 0; i < n; i++) { //n个输入数据
string s;
cin >> s; //当作字符串处理
int has[12] = { 0 }; //是否出现过的标记
int tmpcount = 0;
int size = s.size();
for (int j = 0; j < size; j++) {
if (has[s[j] - '0'] == 0) { //这个数字没出现过
has[s[j] - '0'] = 1; //标记
tmpcount++; //计数
}
}
if (tmpcount < k) count++; //计数小于k,总计数加一
}
cout << count << endl; //输出总计数
return 0;
}