Posted on 2008-04-12 21:44
superman 阅读(276)
评论(0) 编辑 收藏 引用 所属分类:
ZOJ
1 /* Accepted 1159 C++ 00:04.20 3584K */
2 #include <stdio.h>
3 #include <ctype.h>
4 #include <string.h>
5 #include <stdlib.h>
6
7 struct string
8 {
9 int size;
10 char str[10];
11
12 string() { size = 0; }
13 void clear() { size = 0; }
14 void operator += (const char & c)
15 {
16 str[size] = c;
17 size++;
18 }
19 bool operator == (const string & s)
20 {
21 return strcmp(str, s.str) == 0;
22 }
23 }s[100000];
24
25 int cmp(const void * a, const void * b)
26 {
27 string * c = (string *) a;
28 string * d = (string *) b;
29 return strcmp(c -> str, d -> str);
30 }
31
32 int main()
33 {
34 int N;
35 scanf("%d", &N);
36
37 char cur[1000], letter2digit[] = "2223334445556667-77888999-";
38
39 while(N--)
40 {
41 int n;
42 scanf("%d", &n);
43 for(int i = 0; i < n; i++)
44 {
45 s[i].clear();
46 scanf("%s", cur);
47 for(int j = 0; j < strlen(cur); j++)
48 {
49 if(s[i].size == 3)
50 s[i] += '-';
51 if(cur[j] == '-')
52 continue;
53 if(isdigit(cur[j]))
54 {
55 s[i] += cur[j];
56 continue;
57 }
58 s[i] += letter2digit[cur[j] - 'A'];
59 }
60 }
61
62 qsort(s, n, sizeof(string), cmp);
63
64 int i = 0, cnt = 0;
65 while(i < n)
66 {
67 int j = i + 1;
68 while(j < n && s[i] == s[j])
69 j++;
70
71 if(j - i > 1)
72 {
73 cnt++;
74 printf("%s %d\n", s[i].str, j - i);
75 }
76
77 i = j;
78 }
79 if(cnt == 0)
80 printf("No duplicates.\n");
81
82 if(N)
83 putchar('\n');
84 }
85
86 return 0;
87 }
88