问题 B: 分组统计


#include <cstdio>
#include <map>
#include <algorithm>
#include <set>

using namespace std;


int main() {

    int m;
    while (scanf("%d", &m) != EOF) {
        for (int i = 0; i < m; ++i) {
            int n;
            scanf("%d", &n);

            set<int> nums;
            map<int, map<int, int>> group;

            //input
            int a[n];
            for (int j = 0; j < n; ++j) {
                int t;
                scanf("%d", &t);
                a[j] = t;
                nums.insert(t);
            }

            for (int k = 0; k < n; ++k) {
                int t;
                scanf("%d", &t);

                auto it = group.find(t);
                if (it == group.end()) {
                    map<int, int> temp;
                    group.insert(make_pair(t, temp));
                }
                it = group.find(t);
                map<int, int> &tt2 = it->second;
                int t3 = a[k];

                auto it2 = tt2.find(t3);
                if (it2 == tt2.end()) {
                    tt2.insert(make_pair(t3, 1));
                } else {
                    tt2[t3]++;
                }

            }

            //output
            for (auto it = group.begin(); it != group.end(); it++) {
                int key = it->first;
                map<int, int> v = it->second;
                printf("%d={", key);

                for (auto it2 = nums.begin(); it2 != nums.end(); it2++) {
                    auto it3 = v.find(*it2);
                    if (it3 == v.end()) {
                        printf("%d=0", *it2);
                    } else {
                        printf("%d=%d", *it2, it3->second);

                    }
                    if (it2 != --nums.end()) {
                        printf(",");
                    }
                }

                printf("}\n");
            }

        }
    }

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ailinal/p/12310047.html
今日推荐