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;
}

 

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