zoukankan      html  css  js  c++  java
  • FZU-1926+KMP

    题意:给定一篇文章和一些句子。询问句子是否在文章中出现。

    kmp模板题

     1 /*
     2 kmp
     3 */
     4 #include<stdio.h>
     5 #include<string.h>
     6 #include<stdlib.h>
     7 #include<algorithm>
     8 #include<iostream>
     9 #include<queue>
    10 #include<map>
    11 #include<stack>
    12 #include<set>
    13 #include<math.h>
    14 using namespace std;
    15 typedef long long int64;
    16 //typedef __int64 int64;
    17 typedef pair<int64,int64> PII;
    18 #define MP(a,b) make_pair((a),(b)) 
    19 const int maxn = 1005;
    20 const int maxm = 105;
    21 const int inf = 0x7fffffff;
    22 const double pi=acos(-1.0);
    23 const double eps = 1e-8;
    24 
    25 char text[ maxn ][ maxm ];
    26 int len_text;
    27 char pat[ maxn ][ maxm ];
    28 int len_pat;
    29 int next[ maxn ];
    30 
    31 void getnext(){
    32     int i,j;
    33     next[ 0 ] = -1;
    34     i = 0;
    35     j = -1;
    36     while( i<len_pat ){
    37         if( j==-1||strcmp( pat[i],pat[j] )==0||strcmp( pat[j],"_" )==0||strcmp( pat[i],"_" )==0 ){
    38             i ++ ;
    39             j ++ ;
    40             next[ i ] = j;
    41         }
    42         else
    43             j = next[ j ];
    44     }
    45     return ;
    46 }
    47 
    48 bool kmp( ){
    49     getnext();
    50     //for( int i=0;i<len_pat;i++ ){
    51     //    printf("next[ %d ] = %d 
    ",i,next[i]);
    52     //}
    53     int i,j;
    54     i = 0;
    55     j = 0;
    56     while( i<len_text&&j<len_pat ){
    57         if( j==-1||strcmp( text[i],pat[j] )==0||strcmp(pat[j],"_")==0 ){
    58             i ++ ;
    59             j ++ ;
    60         }
    61         else 
    62             j = next[j];
    63         if( j==len_pat ) return true;
    64     }
    65     return false;
    66 }
    67     
    68 int main(){
    69     int T;
    70     scanf("%d",&T);
    71     int Case = 1;
    72     while( T-- ){
    73         len_text = 0;
    74         while( 1 ){
    75             scanf("%s",text[ len_text ]);
    76             if( strcmp( text[ len_text ],"@" )==0 ){
    77                 break;
    78             }
    79             len_text ++ ;
    80         }//input the passage
    81         int m;
    82         scanf("%d",&m);
    83         printf("Case %d:
    ",Case++);
    84         while( m-- ){
    85             len_pat = 0;
    86             while( 1 ){
    87                 scanf("%s",pat[ len_pat ]);
    88                 if( strcmp( pat[ len_pat ],"@" )==0 ){
    89                     break;
    90                 }
    91                 len_pat ++ ;
    92             }
    93             bool flag = kmp();
    94             if( flag ) puts("YES");
    95             else puts("NO");
    96         }
    97     }
    98     return 0;
    99 }
    View Code
    keep moving...
  • 相关阅读:
    借助NetFlow Analyzer的IPAM SPM插件,轻松实现IP和交换机端口管理
    补丁日微软修复了129个漏洞,学习补丁管理最佳实践
    如何通过组策略映射驱动器?
    如何预防磁盘使用率过高?
    ITIL是什么意思?
    Applications Manager—打造最佳云监控策略
    Microsoft 365独家安全解决方案
    怎么让Chrome支持小于12px 的文字?
    vue Router的使用
    vue项目中随机生成验证码
  • 原文地址:https://www.cnblogs.com/xxx0624/p/3302575.html
Copyright © 2011-2022 走看看