题解 | #分组统计#

分组统计

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")

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务