成长轨迹47 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2820:古代密码】
题目http://poj.grids.cn/practice/2820
wa的原因估计是替换那里,有可能不是顺序替换,而是乱序替换。。
【wa代码】
View Code
1 #include <stdio.h>
2 #include <string.h>
3 #include <ctype.h>
4 #include <cmath>
5 void sort(char * s,int leng)
6 {
7 for(int i=0;i<leng-1;i++)
8 {
9 for(int j=i+1;j<leng;j++)
10 {
11 if(s[i]>s[j])
12 {
13 char temp=s[i];
14 s[i]=s[j];
15 s[j]=temp;
16 }
17 }
18 }
19 }
20
21 char pre[150],late[150];
22 char pre1[150],late1[150];
23 int main()
24 {
25 memset(pre,0,sizeof(pre));
26 memset(late,0,sizeof(late));
27 scanf("%s",pre);
28 scanf("%s",late);
29
30 int n = strlen(pre);
31 int m = strlen(late);
32 if(n!=m)
33 {
34 printf("No\n");
35 return 0;
36 }
37
38
39 int delta = (late[0]-pre[0])%26;
40 if(delta<0)
41 delta=-delta;
42
43 for(int d=0;d<26;d++)
44 {
45 memset(pre1,0,sizeof(pre1));
46 memset(late1,0,sizeof(late1));
47 strcpy(pre1,pre);
48 strcpy(late1,late);
49 for(int i=0;i<n;i++)
50 {
51 int delta = (late1[i]-'A'+d)%26;
52 late1[i]=('A'+delta);
53 }
54 sort(pre1,n);//排序之后再检查就知道是不是经过交换处理
55 sort(late1,m);
56
57
58 if(strcmp(pre1,late1)==0)
59 {
60 printf("Yes\n");
61 return 0;
62 }
63 }
64 printf("No\n");
65
66 return 0;}
【ac代码】
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int compare(const void * elem1 , const void * elem2)
6 {
7 return (strcmp((char *)elem1, (char *)elem2));
8 }
9
10 int main(int argc, char *argv[])
11 {
12 char s[101],d[101];
13 int sp[27],dp[27];
14 int i;
15
16 for( i = 0 ; i < 26 ; i++ )
17 sp[i] = dp[i] = 0 ;
18 scanf("%s",d);
19 scanf("%s",s);
20 for( i = 0 ; d[i]!='\0' ; i++ )
21 dp[d[i]-'A']++;
22 for( i = 0 ; s[i]!='\0' ; i++ )
23 sp[s[i]-'A']++;
24 qsort(dp , 26 , sizeof(int) , compare);
25 qsort(sp , 26 , sizeof(int) , compare);
26 for( i = 0 ; i < 26 ; i++ )
27 {
28 if( dp[i]!=sp[i] )break;
29 }
30 if(i==26)printf("YES\n");
31 else printf("NO\n");
32
33 return 0;
34 }