UVa oj AOAPC Volume 1. Elementary Problem Solving String (六)
list[s]); 56 int l=s,r=e; 57 if (l>=r) return; 58 while (l 59 while (l=0) r--; 60 strcpy(wordlist[l],wordlist[r]); 61 while (l 62 strcpy(wordlist[r],wordlist[l]); 63 } 64 strcpy(wordlist[r],x); 65 paixu(s,r-1); 66 paixu(r+1,e); 67 } 68 void qucf () 69 { 70 int i,j; 71 for (i=0;i 72 if (wordlist[i][0]!='\0'){ 73 for (j=i+1;j 74 if (strcmp(wordlist[i],wordlist[j]) == 0) 75 { wordlist[j][0]='\0'; } 76 } 77 } 78 } 79 } 80 int main() 81 { 82 int i=0;//countjuzi多少个句子 83 while (gets(a[i])){ 84 strsmall(a[i]);//变小写 85 i++; 86 } 87 countjuzi=i; 88 chuli (); 89 fenge (); 90 paixu (0,countdanci-1); 91 qucf (); 92 shuchu (); 93 system("pause"); 94 return 0; 95 } 96 心得体会:学会了字符串排序,一开始看到5000,想用冒泡混过去的……结果TLE后来发现数据量高达2,3万……尼玛啊……上块排啊……有木有。。。
第八题:644 - Immediate Decodability 大致题意:就是看有没有字符串是其他字符串的前缀……(我想到了哈夫曼树?最优树?不知道……) 题目分析:反正数据量不到10个,一个一个暴力比较就是了…… 代码: 1 //史上最丑代码!!!!!!!!!! 2 #include 3 #include 4 #include 5 const int maxlen=12; 6 char a[maxlen][maxlen]; 7 int main() 8 { 9 int count=0,i,j,lenmin,flag=0,leni,lenj,count1=0; 10 while (gets(a[0])){ 11 flag=0; 12 for (count=1;;count++){ 13 gets(a[count]); 14 if (a[count][0] == '9' && a[count][1] == '\0') 15 { count1++; break; } 16 } 17 for (i=0;i 18 leni=strlen(a[i]); 19 for (j=i+1;j 20 lenj=strlen(a[j]); 21 lenmin= leni > lenj lenj : leni; 22 if (strncmp (a[i],a[j],lenmin) == 0) 23 { flag=1; printf("Set %d is not immediately decodable\n",count1); break; } 24 } 25 if (flag) break; 26 } 27 if (!flag) printf("Set %d is immediately decodable\n",count1); 28 } 29 return 0; 30 } 31 心得体会:代码很丑,没用结构化,模块化编程……还有一个小插曲……我已开始immediately打错了,老是WA,纠结了半天才发现的。。。
第九题:10115 - Automatic Editing 大致题意:给你几个字符串替换规则,再给你个字符串,要你按规则从第一个到最后一个,对目标字符串进行替换,最后输出结果…… 题目分析:主要是编字符串匹配函数和字符串插入函数…… 代码: 1 #include 2 #include 3 #include 4 char before[15][100],after[15][100],juzi[300]; 5 int i,lenjuzi,lenafter,lenbefore,where; 6 ///////////////////////////////////////////////////////////////////// 7 int pipei () 8 { int j,k,l,flag; 9 lenjuzi=strlen(juzi); 10 lenbefore=strlen(before[i]); 11 lenafter=strlen(after[i]); 12 //求长度要放到里面来,因为改变后,长度也变了…… 13 for (j=0;j<=lenjuzi-lenbefore;j++){ 14 l=j; flag=1; 15 for (k=0;k 16 if ( juzi[l]!=before[i][k] ) 17 { flag=0; break; } 18 } 19 if (flag) { return j;} 20 } 21 return -1; 22 } 23 void strins () 24 { int s,e,j,k; 25 if(lenafter>lenbefore) 26 { s=lenjuzi+1; e=lenjuzi+lenafter-lenbefore+1;//加一啥意思啊??? 27 for (;s>=where+lenbefore;s--,e--){ 28 juzi[e]=juzi[s]; 29 } 30 } 31 else 32 { s=where+lenafter; e=where+lenbefore; 33 for (;e<=lenjuzi;s++,e++){ 34 juzi[s]=juzi[e]; 35 } 36 } 37 for (j=0;j 38 juzi[where]=after[i][j]; 39 } 40 } 41 /////////////////////////////////////////////////////////////////// 42 int main() 4 |