题解 | #分组统计#
分组统计
https://ac.nowcoder.com/practice/5cb47b86911c4aa48722e531a51ec823
#include <iostream>
#include <set>
#include <vector>
#include "bits/stdc++.h"
using namespace std;
int count(vector<int> vec, int x) {
//计算数组vec中x的个数
int ans = 0;
for (int i = 0; i < vec.size(); i++) {
if (vec[i] == x) {
ans++;
}
}
return ans;
}
int main() {
int m;
cin >> m;//m个实例
while (m--) {
int n;
cin >> n;//n为每行元素个数
int arr[n], group[n];//存储元素及其分组
map<int, vector<int>> miv;//map的key为分组,vector存储该分组的元素,map自动升序排列
set<int> s;//set只能插入不重复元素,且自动升序排列
for (int i = 0; i < n; i++) {
cin >> arr[i];
s.insert(arr[i]);
}
set<int> g;//加入所有分组
for (int i = 0; i < n; i++) {
cin >> group[i];
g.insert(group[i]);
}
for (int i = 0; i < n; i++) {
miv[group[i]].push_back(arr[i]);
}
//将元素放入其对应分组的vector数组中,关键一步
set<int>::iterator git = g.begin();//使用迭代器遍历每个分组
for (; git != g.end(); git++) {
int gr = *git;//gr为组号
cout << gr << "={";
vector<int> v = miv[gr];//v为该组全部元素
set<int>::iterator sit = s.begin();
//遍历set中的元素(不会重复),若vector中该元素个数c大于0,则输出c,不存在则输出0
while( sit!=s.end() ) {
int c = count(v, *sit);
if (c > 0) {
cout << *sit << "=" << c ;
} else {
cout << *sit << "=0";
}
if (++sit!=s.end()) {
//如果其下一个元素不是end(),输出逗号
cout<<",";
}
}
cout << "}\n";
}
}
}
// 64 位输出请用 printf("%lld")
查看7道真题和解析
