问题 B: 分组统计 (哈希)

AC代码:

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int group[105][10005] = { -1 };   //group[i][j]代表第i组数字j出现的次数,初始化为-1次(作为标识)
int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int num[10005] = { 0 };
		int zu[1005] = { 0 },len=0;
		memset(group, -1, sizeof(group));
		int n;
		cin >> n;
		for (int i = 0; i < n; i++)
		{
			cin >> num[i];
			for (int j = 0; j < 105; j++)      //只要某一数字出现过,则将所有组的该数字次数初始化为0次
			{
				group[j][num[i]] = 0;
			}
		}
		for (int i = 0; i < n; i++)          //统计并唯一保存组号,并排序
		{
			int temp;
			cin >> temp;
			int j = 0;
			for (; j <len; j++)
			{
				if (zu[j] == temp)break;
			}
			if (j == len)zu[len++] = temp;

			group[temp][num[i]]++;
		}
		sort(zu, zu + len );


		for (int i = 0; i < len; i++)      //输出
		{
			cout << zu[i] << "={";
			int flag = 0;
				for (int j = 0; j < 10005; j++)
				{
					if (group[zu[i]][j] >=0)
					{
						if (flag++)cout << ",";
						cout << j << "=" << group[zu[i]][j] ;
						
					}
				}
				cout << "}\n";
		}


	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weirdo_coder/article/details/88959508
今日推荐