Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <unordered_map>
- #include <fstream>
- #include <utility>
- #include <iomanip>
- #include <vector>
- using namespace std;
- ifstream fin("date.txt");
- int i, n = 0, aux = -1;
- struct alpha{
- int cuvantNr;
- int predecesor;
- int combinatii;
- };
- int main()
- {
- unordered_map<string, alpha> wordMap;
- string temp;
- vector<string> originalString, lastLetter, firstLetter, maxSolution;
- getline(fin, temp);
- for(i = 0; i < temp.size(); i++)
- {
- if(temp[i] == ' ')
- {
- originalString.push_back(temp.substr(aux + 1, i - aux - 1));
- aux = i;
- }
- }
- originalString.push_back(temp.substr(aux + 1, temp.size() - aux - 1));
- n = originalString.size();
- for(i = 0; i < n; i++)
- {
- int wordSize = originalString[i].size();
- firstLetter.push_back(originalString[i].substr(0, 2));
- lastLetter.push_back(originalString[i].substr(wordSize - 2, 2));
- alpha aux;
- aux.cuvantNr = i;
- aux.combinatii = 0;
- wordMap.insert(pair<string, alpha>(lastLetter[i], aux));
- }
- for(i = n - 1; i >= 0; i--)
- {
- auto it_ = wordMap.find(lastLetter[i]);
- auto it = wordMap.find(firstLetter[i]);
- if(it != wordMap.end())
- {
- if(i > it -> second.cuvantNr)
- {
- if(it_ -> second.combinatii == 0)
- it_ -> second.combinatii = 1;
- it -> second.combinatii = it_ -> second.combinatii + 1;
- //cout << it -> second.combinatii << " ";
- it -> second.predecesor = i;
- }
- }
- }
- //cout << endl;
- int maxValue = 0;
- int lookUpValue = 0;
- int predecesor_ = 0;
- unordered_map<string, alpha>::iterator it;
- for(it = wordMap.begin(); it != wordMap.end(); it++)
- {
- //cout <<it -> first <<":"<<it -> second.combinatii << endl ;
- if(maxValue < it -> second.combinatii)
- {
- maxValue = it -> second.combinatii;
- lookUpValue = it -> second.cuvantNr;
- predecesor_ = it -> second.predecesor;
- }
- }
- //cout << endl;
- //cout << maxValue << endl;
- cout << originalString[lookUpValue] << " ";
- cout << originalString[predecesor_] << " ";
- maxValue -= 2;
- while(maxValue)
- {
- auto it = wordMap.find(lastLetter[predecesor_]);
- if(it != wordMap.end())
- {
- maxValue --;
- predecesor_ = it -> second.predecesor;
- cout << originalString[predecesor_] << " ";
- }
- }
- fin.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement