Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <fstream>
  4. #include <utility>
  5. #include <iomanip>
  6. #include <vector>
  7.  
  8. using namespace std;
  9.  
  10. ifstream fin("date.txt");
  11. int i, n = 0, aux = -1;
  12.  
  13. struct alpha{
  14.     int cuvantNr;
  15.     int predecesor;
  16.     int combinatii;
  17. };
  18.  
  19. int main()
  20. {
  21.     unordered_map<string, alpha> wordMap;
  22.     string temp;
  23.     vector<string> originalString, lastLetter, firstLetter, maxSolution;
  24.  
  25.     getline(fin, temp);
  26.     for(i = 0; i < temp.size(); i++)
  27.     {
  28.         if(temp[i] == ' ')
  29.         {
  30.             originalString.push_back(temp.substr(aux + 1, i - aux - 1));
  31.             aux = i;
  32.         }
  33.     }
  34.     originalString.push_back(temp.substr(aux + 1, temp.size() - aux - 1));
  35.     n = originalString.size();
  36.     for(i = 0; i < n; i++)
  37.     {
  38.         int wordSize = originalString[i].size();
  39.         firstLetter.push_back(originalString[i].substr(0, 2));
  40.         lastLetter.push_back(originalString[i].substr(wordSize - 2, 2));
  41.         alpha aux;
  42.         aux.cuvantNr = i;
  43.         aux.combinatii = 0;
  44.         wordMap.insert(pair<string, alpha>(lastLetter[i], aux));
  45.     }
  46.  
  47.  
  48.      for(i = n - 1; i >= 0; i--)
  49.     {
  50.         auto it_ = wordMap.find(lastLetter[i]);
  51.         auto it = wordMap.find(firstLetter[i]);
  52.         if(it != wordMap.end())
  53.         {
  54.             if(i > it -> second.cuvantNr)
  55.             {
  56.                 if(it_ -> second.combinatii == 0)
  57.                     it_ -> second.combinatii = 1;
  58.                 it -> second.combinatii = it_ -> second.combinatii + 1;
  59.                 //cout << it -> second.combinatii << " ";
  60.                 it -> second.predecesor = i;
  61.             }
  62.         }
  63.     }
  64.     //cout << endl;
  65.     int maxValue = 0;
  66.     int lookUpValue = 0;
  67.     int predecesor_ = 0;
  68.     unordered_map<string, alpha>::iterator it;
  69.     for(it = wordMap.begin(); it != wordMap.end(); it++)
  70.     {
  71.         //cout <<it -> first <<":"<<it -> second.combinatii << endl ;
  72.         if(maxValue < it -> second.combinatii)
  73.         {
  74.             maxValue = it -> second.combinatii;
  75.             lookUpValue = it -> second.cuvantNr;
  76.             predecesor_ = it -> second.predecesor;
  77.  
  78.         }
  79.     }
  80.     //cout << endl;
  81.     //cout << maxValue << endl;
  82.     cout << originalString[lookUpValue] << " ";
  83.     cout << originalString[predecesor_] << " ";
  84.     maxValue -= 2;
  85.  
  86.     while(maxValue)
  87.     {
  88.         auto it = wordMap.find(lastLetter[predecesor_]);
  89.  
  90.         if(it != wordMap.end())
  91.         {
  92.             maxValue --;
  93.             predecesor_ = it -> second.predecesor;
  94.             cout << originalString[predecesor_] << " ";
  95.         }
  96.  
  97.     }
  98.     fin.close();
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement