Advertisement
StefanPopescu

PD Dictionar

Nov 23rd, 2018
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. /*
  2. problema 3 Varianta 2 - Laborator PD
  3. date de intrare in date.in si cod.in - de creat dupa bunul plac
  4.  
  5. */
  6.  
  7.  
  8. #include<fstream>
  9. #include<iostream>
  10. #include<string>
  11. #include<unordered_set>
  12. using namespace std;
  13. int main()
  14. {
  15.     int n, m, i, j,v[100],pred[100];
  16.     //v[i] - nr minim de cuvinte in care se descompune S[0...i]
  17.     //v[n-1] - scopul meu in viata;
  18.     // v[i>0]= 1 + min{v[j]|j<i, S[j+1...i] is in M}
  19.     //V[0]=1;
  20.     //initial v[i]=i+1;
  21.  
  22.     string S;
  23.     unordered_set<string> M;
  24.     ifstream fin("date.in");
  25.     string d;
  26.     fin >> m;
  27.     for (i = 0; i < m; i++) { fin >> d; M.insert(d); }
  28.     M.insert("1"); M.insert("0");
  29.     fin.close();
  30.     ifstream ffin("cod.in");
  31.     ffin >> S;
  32.     n = S.size();
  33.     for(auto e:M)
  34.     {
  35.         cout << e << endl;
  36.     }
  37.     cout << "------------" << endl << S<<endl;
  38.  
  39.     for (i = 0; i < n; i++) v[i] = i + 1, pred[i] = i - 1;
  40.     for (i = 1; i < n; i++)
  41.     {
  42.         if (M.find(S.substr(0, i + 1)) != M.end())
  43.             v[i] = 1, pred[i] = -1;
  44.  
  45.     }
  46.  
  47.     cout << endl << "--------------" << endl;
  48.     for (i = 0; i < n; i++)
  49.         cout << v[i] << " ";
  50.    
  51.     for (i = 1; i < n; i++)
  52.         for (j = i - 1; j >= 0; j--)
  53.             if (M.find(S.substr(j + 1, i - j)) != M.end())
  54.             {
  55.                 v[i] = ((v[i] <= v[j]+1) ? v[i] : v[j] + 1);
  56.                 if (v[i] == v[j] + 1) pred[i] = j;
  57.             }
  58.  
  59.     cout << endl << "--------------" << endl;
  60.     for (i = 0; i < n; i++)
  61.         cout << v[i] << " ";
  62.     cout << endl;
  63.     for (i = 0; i < n; i++)
  64.         cout << pred[i] << " ";
  65.  
  66.     cout << endl;
  67.     i = n - 1;
  68.     while (i != -1)
  69.         cout << S.substr(pred[i] + 1, i - pred[i]) << "\n", i = pred[i];
  70.  
  71.     system("pause");
  72.  
  73.  
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement