题解 | #分组统计#
分组统计
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")