题目描述
空中有 n n n 个气球,第 i i i 个气球有一个颜色 c o l i col_i coli (用一个字符串表示)。
请你求出每种气球的个数,按照气球出现的顺序进行排序输出。
输入格式
第一行一个整数 T T T 表示样例个数。 ( 1 ≤ T ≤ 10 ) (1≤T≤10) (1≤T≤10)
对于每个样例,第一行一个整数 n n n 表示气球个数。 ( 1 ≤ n ≤ 100 ) (1≤n≤100) (1≤n≤100)
接下来 n n n 行,每行一个字符串表示 c o l i col_i coli。 ( 1 ≤ ∣ c o l i ∣ ≤ 50 ) (1≤∣col_i∣≤50) (1≤∣coli∣≤50)
字符串仅包含小写英文字母。
输出格式
对于每个样例,输出所有气球的种类和个数。
样例输入
2
3
red
red
blue
5
a
b
e
d
e
样例输出
red 2
blue 1
a 1
b 1
e 2
d 1
思路
使用哈希映射来快速查找和更新每个颜色的出现次数,使用队列来保持颜色的输入顺序。
首先从输入中读取测试用例的数量。对于每个测试用例,清空哈希映射,然后读取气球的数量。接下来,对每个气球进行处理,读取颜色,更新哈希映射中的计数。如果颜色是首次出现,将其添加到队列中。完成所有气球的处理后,按照颜色首次出现的顺序,从哈希映射中取出颜色及其出现的次数,打印出来。
AC代码
#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#define AUTHOR "HEX9CF"
using namespace std;
map<string, int> m1;
queue<string> q1;
int main() {
int t;
cin >> t;
while (t--) {
m1.clear();
int n;
cin >> n;
while (n--) {
string col;
cin >> col;
if (!m1.count(col)) {
q1.push(col);
}
m1[col]++;
}
while (q1.size()) {
string col = q1.front();
cout << col << " " << m1[col] << endl;
q1.pop();
}
}
return 0;
}