题目描述
在一个遥远的古老城市里,画师们以制作精美的油画而闻名。每幅画画完之后,古城都会授予该画一个唯一的识别码,识别码是由 A、C、G、T 四种字符组成字符串。
然而,最近警方破获了一起造假案,收缴了 N 幅仿制的古城油画,这些油画的识别码,也是假冒的,有一些识别码重复出现了多次。
警方请你编写程序,帮助警方统计出,重复出现的识别码的个数。
比如,有 5 个长度为 6 的识别码如下。
AAAAAA
ABCDEF
AAAAAA
ABCDEF
BCDEFG
统计可知:
只出现了 1 次的识别码有 1 个,是 BCDEFG。
重复出现了 2 次的识别码有 2 个,分别是:AAAAAA、ABCDEF。
没有重复出现了 3 次、4 次、5 次的识别码。
输入
第一行是两个整数 N 和 M,分别表示识别码的个数和每个识别码的长度。
接下来有 N 行,每行是一个长度为 M 的识别码。
输出
输出 N 行,每行一个整数,第 i 行请输出,重复出现了 i 次的识别码的数量。
样例
输入
5 6
AAAAAA
ABCDEF
AAAAAA
ABCDEF
BCDEFG
输出
1
2
0
0
0
输入
9 6
AAAAAA
ACACAC
GTTTTG
ACACAC
GTTTTG
ACACAC
ACACAC
TCCCCC
TCCCCC
输出
1
2
0
1
0
0
0
0
0
输入
16 8
AGTTGACC
AGTTGACC
GGTGTGTC
CCTATCCC
CCTATCCC
CCTATCCC
CGCTTACA
CGCTTACA
CTTTATTT
TTCGTGAG
AGTTGACC
AGTTGACC
ATGCAGAA
GAGAGCTT
AGTTGACC
CGCTGAAT
输出
6
1
1
0
1
0
0
0
0
0
0
0
0
0
0
0
说明
样例 1 解释
请参考题目描述中的样例解释。
数据范围
对于 30% 的数据,满足 1≤N≤100。
对于 100% 的数据,满足 1≤M≤20,1≤N≤20000。
代码1
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
unordered_map<string, int> countMap; // 用于统计识别码的出现次数
for (int i = 0; i < N; i++) {
string code;
cin >> code;
countMap[code]++;
}
vector<int> result(N + 1, 0); // 用于存储重复出现次数的个数
for (auto it = countMap.begin(); it != countMap.end(); it++) {
int count = it->second;
result[count]++;
}
for (int i = 1; i <= N; i++) {
cout << result[i] << endl;
}
return 0;
}
代码2
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
vector<string> codes(N); // 存储识别码
vector<int> counts(N, 0); // 存储每个识别码的出现次数
for (int i = 0; i < N; i++) {
cin >> codes[i];
}
for (int i = 0; i < N; i++) {
if (counts[i] == -1) {
continue; // 已经统计过的识别码,跳过
}
int count = 1; // 当前识别码的出现次数
for (int j = i + 1; j < N; j++) {
if (codes[j] == codes[i]) {
count++;
counts[j] = -1; // 标记为已统计过
}
}
counts[i] = count;
}
vector<int> result(N + 1, 0); // 存储重复出现次数的个数
for (int i = 0; i < N; i++) {
int count = counts[i];
if (count != -1) {
result[count]++;
}
}
for (int i = 1; i <= N; i++) {
cout << result[i] << endl;
}
return 0;
}
声明
本解析并未参考官方解析,查看官方解析请前往24年东方博宜OJ编程月赛评讲课 - 网易云课堂