Advertisement
Ladies_Man

Extended stop-symbol ?evristika?

Dec 30th, 2013
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.30 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int max(int a,int b) {
  4.     if (a>b) {
  5.         return a;
  6.     }
  7.     else
  8.         return b;
  9. }
  10.  
  11. void delta1(char* s,int *d) {
  12. }
  13.  
  14. void delta(char* s,int** d) {
  15. }
  16.  
  17. int main(int arg,char** argv)
  18. {
  19.     char s[1000],t[1000];
  20.     if (arg==3) {
  21.         strncpy(s,argv[1],999);
  22.         strncpy(t,argv[2],999);
  23.     }
  24.     else {
  25.         gets(s);
  26.         gets(t);
  27.     }
  28.     int n=strlen(s);
  29.     int m=strlen(t);
  30.     int k=n-1,i;
  31.     int d[n][256];
  32.     /*
  33.         for (j=0;j<=k;j++) {
  34.             d[i][s[i+j]]=j;
  35.         }
  36.     }*/
  37.    
  38.     for (i=0;i<n;i++) {
  39.         int j;
  40.         int k=n-i;
  41.         for (j=0;j<256;j++) {
  42.             d[i][j]=k;
  43.         }    
  44.     }
  45.     int j;
  46.     for (i=0;i<256;i++){
  47.         int k=n;
  48.         int j;
  49.         for (j=0;j<n;j++){
  50.             if (i==s[j]) {
  51.                 if (k!=n)
  52.                     d[j][i]=n-k-1;
  53.                 k=j;
  54.                 continue;
  55.             }
  56.             if (k!=n)
  57.                 d[j][i]=n-k-1;
  58.         }
  59.     }
  60.    
  61.     while (k<m) {
  62.         i=n-1;
  63.         while (t[k]==s[i]) {
  64.             if (i==0) {
  65.                 printf("%d",k);
  66.                 return 0;
  67.             }
  68.             i--;
  69.             k--;
  70.         }
  71.  
  72.         k+=d[i][t[k]];
  73.     }
  74.     printf("%d",m);
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement