码迷,mamicode.com
首页 > 其他好文 > 详细

统计相似字符串

时间:2017-04-16 22:48:32      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:种类   离散化   bre   node   problem   lag   break   nat   组成   

 

http://acm.xidian.edu.cn/problem.php?cid=1028&pid=5

题目描述

给N个字符串,请将他们以相同的组成元素(即组成的元素种类相同,每种元素的个数也一样)来分类,分类后按照原本出现的顺序输出!

输入

多组数据,最多100组数据,每组最多N<5000个字符串,每个字符串长度最多|s|<=8,保证都是小写字母

 

输出

输出多行,每行为同一类别的字符串组

样例输入

6
eat tea tan ate nat bat

样例输出

eat tea ate
tan nat
bat

1、排序+离散化处理

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdlib>
 5 using namespace std;
 6 struct node{
 7     char arr[9],brr[9];
 8     int num;
 9 }st[10000];
10 struct nod{
11     char aa[9];
12     int s,t,num;
13 }st2[10000];
14 bool cmp(node a,node b){
15     if(strcmp(a.brr,b.brr)==0) return a.num<b.num;
16     else return strcmp(a.brr,b.brr)<0;
17 }
18 
19 bool cmp2(nod a,nod b){
20     return a.num<b.num;
21 }
22 
23 int main(){
24     int n;
25     while(scanf("%d",&n)!=EOF){
26         memset(st,0,sizeof(st));
27         memset(st2,0,sizeof(st2));
28         for(int i=0;i<n;i++){
29             scanf("%s",st[i].arr);
30             st[i].num=i;
31             strcpy(st[i].brr,st[i].arr);
32             sort(st[i].brr,st[i].brr+strlen(st[i].brr));
33         }
34         
35         sort(st,st+n,cmp);
36         
37         
38         int i,j;
39         strcpy(st2[0].aa,st[0].brr);
40         st2[0].num=st[0].num;
41         st2[0].s=0;
42         st2[0].t=0;
43         
44         for(i=1,j=0;i<n;i++){
45             if(strcmp(st[i].brr,st2[j].aa)!=0){
46                 j++;
47                 st2[j].num=st[i].num;
48                 st2[j].s=i;
49                 st2[j].t=i;
50                 strcpy(st2[j].aa,st[i].brr);
51             }
52             else{
53                 st2[j].t++;
54             }
55         }
56         
57         sort(st2,st2+j+1,cmp2);
58         for(int k=0;k<=j;k++){
59             printf("%s",st[st2[k].s].arr);
60             for(int t1=st2[k].s+1;t1<=st2[k].t;t1++){
61                 printf(" %s",st[t1].arr);
62             }
63             printf("\n");
64         }
65     }
66     return 0;
67 } 

2、排序+二分

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdlib>
 5 #include<string>
 6 using namespace std;
 7 struct node{
 8     char arr[9],brr[9];
 9     int num;
10 }st[10000];
11 struct nod{
12     char aa[9];
13     int num;
14 }st2[10000];
15 bool used[10000];
16 int n;
17 /*快排必须要有二级排序*/
18 bool cmp(node a,node b){
19     if(strcmp(a.brr,b.brr)<0) return a.num<b.num;
20     else return strcmp(a.brr,b.brr)<0;
21 }
22 
23 
24 int search(int x){
25     int l=0,r=n;
26     while(l<r){
27         int mid=(l+r)/2;
28         if(strcmp(st[mid].brr,st2[x].aa)>=0) r=mid;
29         else l=mid+1;
30     }
31     return r;
32 }
33 int main(){
34     while(scanf("%d",&n)!=EOF){
35         memset(st,0,sizeof(st));
36         memset(st2,0,sizeof(st2));
37         memset(used,0,sizeof(used));
38         for(int i=0;i<n;i++){
39             scanf("%s",st[i].arr);
40             st2[i].num=st[i].num=i;
41             strcpy(st[i].brr,st[i].arr);
42             strcpy(st2[i].aa,st[i].arr);
43             sort(st[i].brr,st[i].brr+strlen(st[i].brr));
44             sort(st2[i].aa,st2[i].aa+strlen(st2[i].aa));
45         }
46         
47         sort(st,st+n,cmp);
48         
49         
50         for(int i=0;i<n;i++){
51             int temp=search(i);
52             if(used[temp]) continue;
53             bool flag=false;
54             while(true){
55                 if(flag==false){ printf("%s",st[temp].arr);flag=true;}
56                 else printf(" %s",st[temp].arr);
57                 used[temp]=true;
58                 if(strcmp(st[temp+1].brr,st[temp].brr)!=0){
59                     printf("\n");
60                     break;
61                 }
62                 temp++;
63             }
64             
65         }
66     }
67     return 0;
68 } 

 

统计相似字符串

标签:种类   离散化   bre   node   problem   lag   break   nat   组成   

原文地址:http://www.cnblogs.com/elpsycongroo/p/6720124.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!