Java教程

《算法笔记》4.2小节——算法初步->哈希 问题 B: 分组统计

本文主要是介绍《算法笔记》4.2小节——算法初步->哈希 问题 B: 分组统计,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

问题 B: 分组统计

时间限制 : 1.000 sec 内存限制 : 32 MB

题目描述

先输入一组数,然后输入其分组,按照分组统计出现次数并输出,参见样例。

输入

输入第一行表示样例数m,对于每个样例,第一行为数的个数n,接下来两行分别有n个数,第一行有n个数,第二行的n个数分别对应上一行每个数的分组,n不超过100。

输出

输出m行,格式参见样例,按从小到大排。

样例输入

1
7
3 2 3 8 8 2 3
1 2 3 2 1 3 1

样例输出

1={2=0,3=2,8=1}
2={2=1,3=0,8=1}
3={2=1,3=1,8=0}
#include <iostream>
#include <set>
#include <cstring>

using namespace std;
int couter[2000][2000];

int main() {
    int n, m;
    while (cin >> m) {
        while (m--) {
            set<int> number;
            set<int> group;
            int cin_number[110], cin_group[110];
            memset(couter, 0, sizeof couter);
            cin >> n;
            for (int i = 0; i < n; ++i) {
                cin >> cin_number[i];
                number.insert(cin_number[i]);
            }
            for (int i = 0; i < n; ++i) {
                cin >> cin_group[i];
                group.insert(cin_group[i]);
                couter[cin_group[i]][cin_number[i]]++;
            }
            for (auto i = group.begin(); i != group.end(); ++i) {
                cout << *i << "={";
                for (auto j = number.begin(); j != number.end(); ++j) {
                    if (j != number.begin())
                        cout << "," << *j << "=" << couter[*i][*j];
                    else
                        cout << *j << "=" << couter[*i][*j];
                }
                cout << "}" << endl;
            }
        }
    }
    return 0;
}
这篇关于《算法笔记》4.2小节——算法初步->哈希 问题 B: 分组统计的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!