Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int prefix[103],len;
- string s,text,pattern;
- void compute_prefix()
- {
- int i,j=0;
- prefix[1] = 0;
- for(i=2; i<=len; i++)
- {
- while(j && pattern[j+1]!=pattern[i])
- {
- j = prefix[j];
- }
- if(pattern[j+1]==pattern[i])
- {
- j++;
- }
- prefix[i] = j;
- }
- }
- int KMP_match()
- {
- int i,j=0;
- int mx = 0;
- for(i=1; i<=len; i++)
- {
- while(j && pattern[j+1]!=text[i])
- {
- j = prefix[j];
- }
- if(pattern[j+1]==text[i])
- {
- j++;
- }
- }
- return j;
- }
- int main()
- {
- int n,test,i,j,k,w,ans;
- scanf("%d",&test);
- while(test--)
- {
- scanf("%d%d",&k,&w);
- len = k;
- cin>>s;
- text = " "+s;
- ans = 0;
- for(i=2;i<=w;i++)
- {
- cin>>s;
- pattern = " "+s;
- compute_prefix();
- n = KMP_match();
- ans+=len-n;
- text = pattern;
- }
- printf("%d\n",ans+len);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement