Advertisement
Guest User

Untitled

a guest
Nov 20th, 2014
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. #include <cstring>
  2. #include <cstdio>
  3. #include <climits>
  4.  
  5. using namespace std;
  6.  
  7. int const MAX = 2000010;
  8. int const mx = 51;
  9.  
  10. char s1[MAX], s2[mx];
  11.  
  12. int d1[mx], d2[mx], l1[mx], l2[mx];
  13.  
  14. int main()
  15. {
  16. int dp, n;
  17. gets(s1); gets(s2);
  18. scanf("%d", &dp);
  19. n = strlen(s2);
  20. for( int j=0; j<=n; j++ ) {
  21.   d1[j] = j;
  22.   d2[j] =  INT_MAX;
  23.   l1[j] = n - j;
  24. }
  25.  
  26. int jj = strlen(s1);
  27. for( int i=1; i<=jj; i++ )
  28. {
  29.   d2[0] = 0;
  30.   l2[0] = n;
  31.  
  32.   for( int j=1; j<=n; j++ ){
  33.       if( d2[j] > d2[j-1] + 1  ){
  34.           d2[j] = d2[j-1] + 1;
  35.           l2[j] = l2[j-1] - 1;
  36.       }
  37.  
  38.       if (d2[j] > d1[j] + 1) {
  39.           d2[j] = d1[j] + 1;
  40.           l2[j] = l1[j] - 1;
  41.       }
  42.  
  43.       if (d2[j] > d1[j-1] + (s1[i-1] != s2[j-1])) {
  44.           d2[j] = d1[j-1] + (s1[i-1] != s2[j-1]);
  45.           l2[j] = l1[j-1];
  46.       }
  47.   }
  48. /*
  49. printf("\n - %d\n", i);
  50. for (int i=1; i<=n; i++) {
  51.    printf("%d ", d2[i]);
  52. }
  53. printf("\n");*/
  54.   if( d2[n] <= dp )
  55.   {
  56.       printf("%d %d\n", i-l2[n], l2[n]);
  57.       return 0;
  58.   }
  59.  
  60.   memcpy( d1, d2, sizeof(d2) );
  61.   memcpy( l1, l2, sizeof(l2) );
  62.   for( int j=0; j<=n; j++ ) d2[j] = INT_MAX;
  63.   memset(l2, 0, n);
  64. }
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement