Tuesday, April 19, 2016

UVa 10336 - Rank The Languages

// aarifshuvo   ``CSEJU

#include <bits/stdc++.h>
#define ll long long
#define SZ(x) ((int)(x).size())
#define scl(x) scanf("%lld", &x)
#define scll(x,y) scanf("%lld %lld", &x, &y)
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
using namespace std;

ll t,r,c;
string sa[100007];

struct DT
{
    int freq;
    char letter;
}arr[30];

int cnt[27],id;
char ch;

bool cmp(DT a, DT b)
{
    if(a.freq!=b.freq) return a.freq>b.freq;
    else return a.letter<b.letter;
}

void dfs(int i, int j)
{
    if(i<0 or j<0 or i==r or j==c or sa[i][j]=='@') return;

    if(ch==sa[i][j])
        sa[i][j]='@';
    else return;

    dfs(i,j+1);
    dfs(i,j-1);
    dfs(i-1,j);
    dfs(i+1,j);
}

int main()
{
    scl(t);
    FOR(cs,1,t)
    {
        memset(cnt,0,sizeof cnt);
        scll(r,c);
        REP(i,r) cin>>sa[i];

        REP(i,r)
        {
            REP(j,c)
            {
                if(sa[i][j]!='@')
                {
                    cnt[sa[i][j]-'a']++;
                    ch = sa[i][j];
                    dfs(i,j);
                }
            }
        }

        int id=0;
        REP(i,26)
        {
            if(cnt[i]) arr[id].letter= i+'a', arr[id].freq=cnt[i], id++;
        }
        sort(arr,arr+id,cmp);

        printf("World #%d\n", cs);
        REP(i,id)
        {
            printf("%c: %d\n", arr[i].letter, arr[i].freq);
        }
    }
    return 0;
}

No comments:

Post a Comment