Advertisement
Dennnhhhickk

Untitled

Nov 8th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1. // ConsoleApplication1.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <string>
  7. #include <cmath>
  8. //#include <bits/stdc++.h>
  9. #include <math.h>
  10. #include <algorithm>
  11.  
  12. using namespace std;
  13.  
  14. typedef long long ll;
  15.  
  16. ll dp[10100][1000], a[1000], b[1000], ans[1000];
  17. string s, t;
  18.  
  19. int main()
  20. {
  21.     cin >> s >> t;
  22.     s = " " + s + " ";
  23.     for (int i = 1; i < s.size(); i++)
  24.         for (int j = 0; j < t.size(); j++)
  25.         {
  26.             if (s[i] == t[j])
  27.                 dp[i][j]++;
  28.             dp[i + 1][j] = dp[i][j];
  29.         }
  30.     for (int i = 1; i < s.size(); i++)
  31.         for (int j = 0; j < t.size(); j++)
  32.             if (s[i] == t[j])
  33.                 if ((j == 0 || a[j - 1]) && !a[j])
  34.                 {
  35.                     a[j] = i;
  36.                     break;
  37.                 }
  38.     reverse(s.begin(), s.end());
  39.     reverse(t.begin(), t.end());
  40.     for (int i = 1; i < s.size(); i++)
  41.         for (int j = 0; j < t.size(); j++)
  42.             if (s[i] == t[j])
  43.                 if ((j == 0 || b[j - 1]) && !b[j])
  44.                 {
  45.                     b[j] = s.size() - i - 1;
  46.                     break;
  47.                 }
  48.     reverse(s.begin(), s.end());
  49.     reverse(t.begin(), t.end());
  50.     reverse(b, b + t.size());
  51.     for (int i = 0; i < t.size(); i++)
  52.         if (a[i] != -1 && b[i] != -1)
  53.             ans[i] = dp[b[i]][i] - dp[a[i]][i] + 1;
  54.     ll mn = 0;
  55.     for (int i = 1; i < t.size(); i++)
  56.     {
  57.         if (ans[i] < ans[mn])
  58.             mn = i;
  59.         //cout << a[i] << ' ' << b[i] << ' ' << ans[i] << endl;
  60.     }
  61.     for (int i = a[mn], j = 0; i <= b[mn] - j && i < s.size(); i++)
  62.     {
  63.         if (s[i] == t[mn])
  64.         {
  65.             s.erase(i, 1);
  66.             j++;
  67.             i--;
  68.         }
  69.     }
  70.     s.erase(0, 1);
  71.     s.erase(s.size() - 1, 1);
  72.     cout << s << endl;
  73.     system("pause");
  74.     return 0;
  75. }
  76. /*
  77.  
  78. abbacc
  79. abc
  80.  
  81. abfoaoaaabaaaoaaa
  82. faboa
  83.  
  84. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement