时间限制 : 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; }