Advertisement
STANAANDREY

fazan

Dec 14th, 2019
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. ifstream fin("file.in");
  5.  
  6. const char newline('\n');
  7. const int NMAX(103);
  8. string text[NMAX];
  9. vector <unsigned> dp(NMAX, 1), poz(NMAX);
  10. int n;
  11.  
  12. void Read()
  13. {
  14.     while (fin >> text[++n])
  15.         continue;
  16.     n--;
  17.     return;
  18. }
  19.  
  20. string getSuf(string s)
  21. {
  22.     string suf = "";
  23.     unsigned l = s.size();
  24.     suf += s[l - 2];
  25.     suf += s[l - 1];
  26.     return suf;
  27. }
  28.  
  29. string getPref(string s)
  30. {
  31.     string pref = "";
  32.     pref += s[0];
  33.     pref += s[1];
  34.     return pref;
  35. }
  36.  
  37. void display(int p)
  38. {
  39.     if (!p)
  40.         return;
  41.     display(poz.at(p));
  42.     cout << text[p] << newline;
  43. }
  44.  
  45. int main()
  46. {
  47.     Read();
  48.     for (int j = 2; j <= n; j++)
  49.     {
  50.         for (int i = 1; i < j; i++)
  51.             if (getPref(text[j]) == getSuf(text[i]) && dp[j] < dp[i] + 1)
  52.             {
  53.                 dp.at(j) = dp.at(i) + 1;
  54.                 poz.at(j) = i;
  55.             }
  56.     }
  57.  
  58.     unsigned maxi = 0, pozmax;
  59.     for (int i = 1; i <= n; i++)
  60.         if (maxi < dp.at(i))
  61.         {
  62.             maxi = dp.at(i);
  63.             pozmax = i;
  64.         }
  65.     display(pozmax);
  66.     return EXIT_SUCCESS;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement