fork download
  1. import sys
  2. def take_state(m, i, j, c):
  3. m[i][j] = '0'
  4. for k in xrange(2):
  5. for l in xrange(2):
  6. if k == l:
  7. continue
  8. if m[i+k][j+l] == c:
  9. take_state(m, i+k, j+l, c)
  10. if m[i-k][j-l] == c:
  11. take_state(m, i-k, j-l, c)
  12.  
  13. t = int(sys.stdin.readline())
  14.  
  15. for c in xrange(t):
  16. n, m = map(int, sys.stdin.readline().split())
  17. mtx = [[] for x in range(n+2)]
  18. mtx[0] = ['0']*(m+2)
  19. mtx[n+1] = ['0']*(m+2)
  20. for i in xrange(1,n+1):
  21. mtx[i] = ['0']
  22. mtx[i] += list(sys.stdin.readline().strip('\n'))
  23. mtx[i] += ['0']
  24.  
  25. Dict = {}
  26. for i in xrange(1,n+1):
  27. for j in xrange(1,m+1):
  28. if mtx[i][j] != '0':
  29. if mtx[i][j] not in Dict:
  30. Dict[mtx[i][j]] = 0
  31. Dict[mtx[i][j]] += 1
  32. take_state(mtx, i, j, mtx[i][j])
  33.  
  34. tuples = []
  35. for x in Dict:
  36. tuples.append((x, Dict[x]))
  37. ans = sorted(tuples, key=lambda x:(x[1]*-1,x[0]))
  38. print 'Case #%d:' % (c+1)
  39. for x in ans:
  40. print '%s: %d' % (x[0], x[1])
  41.  
  42.  
Success #stdin #stdout 0.01s 8976KB
stdin
10
9 5
aabba
cdcbc
dabdc
abdcc
adbdc
bbacd
ccbdd
dabaa
abdad
6 1
c
d
a
b
d
d
6 4
addd
abad
acbc
acba
dbcc
babb
7 7
abbacca
ddacccb
bccacdc
ddbdcdb
bacabbd
dadcaab
bdaabbd
6 1
d
d
b
b
a
d
3 7
dddcbcc
cadcbca
dadabad
8 9
dddcdadac
daabddacc
cbbcdbdad
cabbbbbab
bdcddcdbb
bdaabaadc
addcdaddc
bcbdcdcdc
5 10
bddaacacab
baabdabcdd
ddacdacdac
acaccbacac
bbddaabbdc
10 5
ccdda
cabdd
ccaad
cdcca
dbddc
dacbd
babbd
cbbdc
dadcd
abaaa
6 9
aaadabaca
dbcbbadaa
cabaccccd
bdaaaabdd
cbdbacbbb
dddaacccd
stdout
Case #1:
d: 10
a: 8
b: 7
c: 5
Case #2:
d: 2
a: 1
b: 1
c: 1
Case #3:
b: 5
a: 4
c: 3
d: 2
Case #4:
b: 10
a: 9
d: 9
c: 5
Case #5:
d: 2
a: 1
b: 1
Case #6:
a: 4
c: 3
d: 3
b: 1
Case #7:
d: 12
c: 11
a: 9
b: 7
Case #8:
a: 9
b: 7
c: 7
d: 7
Case #9:
d: 9
a: 8
c: 7
b: 5
Case #10:
b: 8
a: 7
d: 7
c: 6