POJ 1002

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 struct In{
 5     int a;
 6     int num[10];
 7 }pu_1[100050];
 8 
 9 int cmp(const void*c,const void*d)
10 {
11     return (*(In *)c).a-(*(In *)d).a;
12 }
13 
14 
15 
16 char str_1[100050][300]={0};
17 int pu_2[100050][2]={0};
18 int main()
19 {
20     int i,j,m,n,flog,k;
21     scanf("%d",&m);
22     for(i=0;i<m;i++)
23         scanf("%s",str_1[i]);
24     for(i=0;i<m;i++)
25         for(j=0,n=1000000,k=1,pu_1[i].a=0;j<strlen(str_1[i]);j++)
26         {
27             if(str_1[i][j]<='9'&&str_1[i][j]>='0')
28             {
29                 pu_1[i].a+=(str_1[i][j]-'0')*n;
30                 n/=10;
31                 pu_1[i].num[k]=str_1[i][j]-'0';
32                 k++;
33             }
34             if(str_1[i][j]<='P'&&str_1[i][j]>='A')
35             {
36                 pu_1[i].a+=((str_1[i][j]-'A')/3+2)*n;
37                 n/=10;
38                 pu_1[i].num[k]=(str_1[i][j]-'A')/3+2;
39                 k++;
40             }
41             if(str_1[i][j]>'Q'&&str_1[i][j]<='Y')
42             {
43                 pu_1[i].a+=(((str_1[i][j])-'Q')/3+7)*n;
44                 n/=10;
45                 pu_1[i].num[k]=(str_1[i][j]-'Q')/3+7;
46                 k++;
47             }
48         }
49     qsort(pu_1,m,sizeof(pu_1[0]),cmp);
50     for(i=0,j=0;i<m;i++)
51     {
52         if(i==0) pu_2[j][0]=pu_1[i].a;
53         else{
54             if(pu_1[i].a==pu_2[j][0]) pu_2[j][1]++;
55             else {
56                 j++;
57                 pu_2[j][0]=pu_1[i].a;
58             }
59         }
60     }
61     for(i=0,j=0,flog=0;i<m;i++)
62     {
63         if(pu_2[j][1]!=0&&pu_1[i].a==pu_2[j][0])
64         {
65             printf("%d%d%d-%d%d%d%d",pu_1[i].num[1],pu_1[i].num[2],pu_1[i].num[3],pu_1[i].num[4],pu_1[i].num[5],pu_1[i].num[6],pu_1[i].num[7]);
66             printf(" %d\n",pu_2[j][1]+1);
67             flog++;
68             j++;
69         }
70         if(pu_2[j][1]==0) j++;
71     }
72     if(flog==0) printf("No duplicates.\n");
73     return 0;
74 }

利用一个结构体,一个存号码的数字和,一个存它的每一位数,考虑0开头的号码

然后再利用结构体进行排序

并进行输出

posted @ 2016-03-29 00:17  一个_小菜鸟  阅读(143)  评论(0编辑  收藏  举报