10336

#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#include <queue>
#include <cmath>
#include <cstring>
#include <fstream>
#include <string>
#include <algorithm>

#define INF 1000000000
#define ll long long

using namespace std;

int h,w;
string arr[1010];
bool visit[1010][1010];
int stateCount[26];

struct stateInfo{
	int count;
	int name;
};

vector<stateInfo> vb;

bool cmp(stateInfo a,stateInfo b)
{
	if(a.count!=b.count)
	return a.count>b.count;
	else
	return a.name<b.name;
}
void findSet(int a,int b)
{
	char c = arr[a][b];
	int x,y;
	queue<int> cue;
	cue.push(a);
	cue.push(b);
	visit[a][b]=1;
	while(!cue.empty())
	{
		x = cue.front();cue.pop();
		y = cue.front();cue.pop();
		if(x+1<h && arr[x+1][y]==c && visit[x+1][y]==0)
		{
			visit[x+1][y]=1;
			cue.push(x+1);
			cue.push(y);
		}
		if(x-1>=0 && arr[x-1][y]==c && visit[x-1][y]==0)
		{
			visit[x-1][y]=1;
			cue.push(x-1);
			cue.push(y);
		}
		if(y+1<w && arr[x][y+1]==c && visit[x][y+1]==0)
		{
			visit[x][y+1]=1;
			cue.push(x);
			cue.push(y+1);
		}
		if(y-1>=0 && arr[x][y-1]==c && visit[x][y-1]==0)
		{
			visit[x][y-1]=1;
			cue.push(x);
			cue.push(y-1);
		}
	}
}
int main()
{
	int t,kase=1;
	scanf("%d",&t);
	stateInfo tmp;
	getchar();
	while(t--)
	{
		cin>>h;
		getchar();
		cin>>w;
		getchar();
		vb.clear();
		memset(visit,0,sizeof(visit));
		memset(stateCount,0,sizeof(stateCount));
		for(int i=0;i<h;i++)
		{
			getline(cin,arr[i]);
		}
		for(int i=0;i<h;i++)
		{
			for(int j=0;j<w;j++)
			{
				if(visit[i][j]==0)
				{
					findSet(i,j);
					stateCount[arr[i][j]-'a']+=1;
				}
			}
		}
		cout<<"World #"<<kase++<<"\n";
		for(int i=0;i<26;i++)
		{
			if(stateCount[i]!=0)
			{
				//cout<<char('a'+i)<<": "<<stateCount[i]<<"\n";
				tmp.name = i;
				tmp.count = stateCount[i];
				vb.push_back(tmp);
			}
		}
		sort(vb.begin(),vb.end(),cmp);
		for(int i=0;i<vb.size();i++)
		{
			cout<<char(vb[i].name+'a')<<": "<<vb[i].count<<"\n";
		}
	}
	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *