Codeup 分组统计

问题 B: 分组统计

时间限制: 1 Sec  内存限制: 32 MB
提交: 2134  解决: 522
[提交][状态][讨论版][命题人:外部导入]

题目描述

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

输入

输入第一行表示样例数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}

分析:题目描述不是很正确。使用哈希的思想,直接使用map映射。有两个需要注意的地方,一是hash数组的大小设置,因为题目中整数没有给范围,所以要设置大一些;再一个就是我自己的问题,map用过一次后记得清除。

map<int,int[100010]> mp;    //这里的数组相对于hash数组,所以下标对应的是整数的大小
int main(){
	int m;
	cin>>m;
	while(m--){
		int n;
		cin>>n;
		
		int s1[110];
		for(int i=0;i<n;i++)
			cin>>s1[i];	
				
		int s[110];
		for(int i=0;i<n;i++){
			cin>>s[i];
			mp[s[i]][s1[i]]++;
		}
		
		sort(s,s+n);
		int l1=unique(s,s+n)-s;	//得到分组去重从小到大排序        
		sort(s1,s1+n);
		int l2=unique(s1,s1+n)-s1;//得到输入数的去重排序 
		
		for(int i=0;i<l1;i++){
			cout<<s[i]<<"={";
			for(int j=0;j<l2;j++){
				cout<<s1[j]<<"="<<mp[s[i]][s1[j]];
				if(j!=l2-1)
					cout<<",";
			}
			cout<<"}"<<endl;
		}
		mp.clear();        //注意清除
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章