Witam,
Rozwiązuję zadanie "Budka Suflera"ze spoja (link: https://pl.spoj.com/problems/MWP8_1B/ ) Zostało zaakceptowane przez sędziego ale patrząc na wynik w całości nie wydaje się to być optymalne rozwiązanie. Na ideone.com od razu wyrzuca mi komunikat o przekroczeniu limitu czasu. Czy mogę Was prosić o wskazówki co mogłabym zmienić/polepszyć w kodzie aby był szybszy? Dopiero zaczynam naukę z programowaniem :)
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
vector<string> writeText();
vector<string> checkMissedWords(vector<string> songText, vector<string> rememberedText);
void sortAlfabeticlly(vector<string> &missedWords);
void displayWords(vector<string> &missedWords);
int main()
{
vector<string> songText;
vector<string> rememberedText;
vector<string> missedWords;
songText = writeText();
rememberedText = writeText();
missedWords = checkMissedWords(songText, rememberedText);
sortAlfabeticlly(missedWords);
displayWords(missedWords);
return 0;
}
vector<string> writeText(){
vector<string> writtenText;
string text;
do
{
cin>>text;
writtenText.push_back(text);
}while(cin.get() != '\n');
return writtenText;
}
vector<string> checkMissedWords(vector<string> songText, vector<string> rememberedText){
for(int i = 0; i < rememberedText.size(); i++){
for(int j = 0; j < songText.size(); j++){
if(rememberedText[i] == songText[j]){
songText.erase(songText.begin() + j);
break;
}
continue;
}
}
return songText;
}
void sortAlfabeticlly(vector<string> &missedWords){
sort(missedWords.begin(), missedWords.end());
}
void displayWords(vector<string> &missedWords){
cout << missedWords.size() << endl;
for(unsigned i = 0; i < missedWords.size(); i++)
cout<<missedWords[i]<<endl;
}