Pabon_SEC

Abnormal 89's

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