Advertisement
Pabon_SEC

Scrolling Sign

Apr 13th, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int prefix[103],len;
  6.  
  7. string s,text,pattern;
  8.  
  9. void compute_prefix()
  10. {
  11.     int i,j=0;
  12.  
  13.     prefix[1] = 0;
  14.  
  15.     for(i=2; i<=len; i++)
  16.     {
  17.         while(j && pattern[j+1]!=pattern[i])
  18.         {
  19.             j = prefix[j];
  20.         }
  21.  
  22.         if(pattern[j+1]==pattern[i])
  23.         {
  24.             j++;
  25.         }
  26.  
  27.         prefix[i] = j;
  28.     }
  29. }
  30.  
  31. int KMP_match()
  32. {
  33.     int i,j=0;
  34.  
  35.     int mx = 0;
  36.  
  37.     for(i=1; i<=len; i++)
  38.     {
  39.         while(j && pattern[j+1]!=text[i])
  40.         {
  41.             j = prefix[j];
  42.         }
  43.  
  44.         if(pattern[j+1]==text[i])
  45.         {
  46.             j++;
  47.         }
  48.  
  49.     }
  50.  
  51.     return j;
  52. }
  53.  
  54.  
  55.  
  56. int main()
  57. {
  58.     int n,test,i,j,k,w,ans;
  59.  
  60.     scanf("%d",&test);
  61.  
  62.     while(test--)
  63.     {
  64.         scanf("%d%d",&k,&w);
  65.  
  66.         len = k;
  67.  
  68.         cin>>s;
  69.  
  70.         text = " "+s;
  71.  
  72.         ans = 0;
  73.  
  74.         for(i=2;i<=w;i++)
  75.         {
  76.             cin>>s;
  77.  
  78.             pattern = " "+s;
  79.  
  80.             compute_prefix();
  81.  
  82.             n = KMP_match();
  83.  
  84.             ans+=len-n;
  85.  
  86.             text = pattern;
  87.         }
  88.  
  89.         printf("%d\n",ans+len);
  90.     }
  91.  
  92.     return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement