Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <string.h>
- #include <vector>
- #include <map>
- #include <algorithm>
- using namespace std;
- struct fWord
- {
- char *cuv; int indice;
- vector<int> putere;
- };
- bool comp(fWord a, fWord b)
- {
- for(size_t i = 0; i < min(a.putere.size(), b.putere.size()); i++)
- {
- if(a.putere[i] > b.putere[i])
- return true;
- if(a.putere[i] < b.putere[i])
- return false;
- }
- return a.indice < b.indice;
- }
- const int MAX = 30050;
- char line[MAX]; int maxim, nr;
- vector<fWord> final;
- void getWords()
- {
- fWord add; vector<int> a; a.push_back(0);
- char *p, *s; p = strtok(line, " "); int i = -1;
- while(p)
- {
- i++;
- s = new char [strlen(p)]; strcpy(s, p);
- add.cuv = s; add.putere = a; add.indice = i;
- final.push_back(add);
- p = strtok(NULL, " ");
- }
- }
- void prepare()
- {
- sort(final.begin(), final.end(), comp);size_t i;
- for(i = 0; i < final.size(); i++)
- if(final[i].putere[0] != maxim)
- break;
- nr = i;
- }
- void afisare()
- {
- prepare();
- ofstream out("mesaje.out");
- out<<nr<<'\n';
- for(size_t i = 0; i < nr; i++)
- {
- reverse(final[i].cuv, final[i].cuv + strlen(final[i].cuv));
- out<<final[i].cuv<<" ";
- }
- out.close();
- }
- int main()
- {
- ifstream in("mesaje.in");
- int i = 0, j; char *p;
- in.getline(line, MAX);
- getWords();
- while(in.getline(line, MAX))
- {
- i++; j = -1;
- p = strtok(line, " ");
- while(p)
- {
- j++;
- if(!strcmp(p, final[j].cuv))
- {
- vector<int>::iterator it; it = final[j].putere.begin();
- final[j].putere.insert(it, i);
- maxim = i;
- }
- p = strtok(NULL, " ");
- }
- }
- afisare();
- return 0;
- }
Add Comment
Please, Sign In to add comment