hrbustoj 1551:基礎データ構造——文字列2ウイルスII(文字列マッチング、BMアルゴリズム練習)
5453 ワード
基礎データ構造——文字列2ウイルスIITime Limit:1000 MS Memory Limit:10240 KTotal Submit:284(138 users)Total Acceptted:177(135 users)Rating:Special Jdge:NoDescriptionは、コンピュータウイルスの概念が提案されてから、ウイルスの種類が次々と出てきます.今はただのウイルスはウイルス対策ソフトから逃げられない.そのため、現在のウイルスはいくつかの文字を隠して、クリアする目的を達成します.連続文字列として知られている「bkpstr」はウイルスコードの一部です.与えられた文字列の中にウイルスコードが含まれているかどうかを分析してください.
Input本題は複数のテストデータがあり、各グループのデータに対して文字列Str(長さが100を超えない)を入力し、ファイル終了まで処理します.
Output文字列にウイルスコードが含まれている場合、Warningを出力して改行します.さもなければSafeを出力して改行します.
Sample Input 1234 55676 sa
Sample Output Safe
Author楊和禹@HRBUST
文字列が一致します.
私が使ったのはBMアルゴリズムで、BMアルゴリズムはBFアルゴリズムの最適化で、亜線形整合アルゴリズムです.BFより少し早いです.
コード:
フリーコード:www.cnblogs.com/ym 2 013
Input本題は複数のテストデータがあり、各グループのデータに対して文字列Str(長さが100を超えない)を入力し、ファイル終了まで処理します.
Output文字列にウイルスコードが含まれている場合、Warningを出力して改行します.さもなければSafeを出力して改行します.
Sample Input 1234 55676 sa
Sample Output Safe
Author楊和禹@HRBUST
文字列が一致します.
私が使ったのはBMアルゴリズムで、BMアルゴリズムはBFアルゴリズムの最適化で、亜線形整合アルゴリズムです.BFより少し早いです.
コード:
1 #include <stdio.h>
2 int BM_index(char t[],char s[]) //
3 { 4 int i,j,lt,ls; 5 for(lt=0;t[lt];lt++); //
6 for(ls=0;s[ls];ls++); 7 //BM
8 for(i=ls-1;i>=lt-1;i--) 9 if(s[i]==t[lt-1]){ 10 for(j=2;j<=lt;j++) 11 if(t[lt-j]!=s[i-j+1]) 12 break; 13 if(j>lt) break; 14 } 15 if(i>=lt-1) return i-lt+1; 16 return -1; 17 } 18 int main() 19 { 20 char t[20]="bkpstor",s[110]; 21 while(scanf("%s",s)!=EOF){ 22 if(BM_index(t,s)==-1) 23 printf("Safe
"); 24 else
25 printf("Warning
"); 26 } 27 return 0; 28 }
フリーコード:www.cnblogs.com/ym 2 013