http://codeup.cn/problem.php?cid=100000582&pid=1
问题 B: 分组统计
时间限制: 1 Sec 内存限制: 32 MB
提交: 400 解决: 104
[提交][状态][讨论版][命题人:外部导入]
题目描述
先输入一组数,然后输入其分组,按照分组统计出现次数并输出,参见样例。
输入
输入第一行表示样例数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<algorithm>头文件下的两个函数:
max_element(first, last+1) 返回容器最大元素的地址.
unique_copy( ) 容器中元素去重后复制到另一个容器中
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int main(int argc, char** argv) {
int t;
int n;
int num[110];
int cls[110];
while(cin>>t){
while(t--){
cin>>n;
for(int i=0;i<n;i++){
cin>>num[i];
}
for(int i=0;i<n;i++){
cin>>cls[i];
}
//max_element(first,last+1)求数组最大值
int max_num=*max_element(num,num+n);
int max_cls=*max_element(num,num+n);
int hashtable[max_cls+1][max_num+1];
memset(hashtable,0,sizeof(hashtable));
for(int i=0;i<n;i++){
hashtable[cls[i]][num[i]]++;
}
//unique_copy(arr,arr+n,back_inserter(v))
//对cls数组排序去重复
vector<int>v_cls;
sort(cls,cls+n);
unique_copy(cls,cls+n,back_inserter(v_cls));
//对num数组排序去重复
vector<int>v_num;
sort(num,num+n);
unique_copy(num,num+n,back_inserter(v_num));
for(int i=0;i<v_cls.size();i++){
cout<<v_cls[i]<<"={";
for(int j=0;j<v_num.size();j++){
cout<<v_num[j]<<"="<<hashtable[v_cls[i]][v_num[j]];
if(j<v_num.size()-1){
cout<<",";
}
}
cout<<"}"<<endl;
}
}
}
return 0;
}