Kazimirko

Основы С++ / Тема 5 / Урок 3. Преимущества множеств / Задача 1

Mar 6th, 2021 (edited)
966
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Основы С++ / Тема 5 / Урок 3. Преимущества множеств / Задача 1
  3.  
  4. Задание 1
  5. Представьте, что анализируете запросы пользователей в вашей поисковой системе. Есть слова запроса и описание животного. Посчитайте релевантность запроса — размер множества слов, которые входят и в запрос, и в описание.
  6.  
  7. Формат ввода
  8. Сначала вводится строка-запрос, затем с новой строчки строка-описание. В примерах \n — символ переноса строчки. Слова до \n — это запрос. Слова после \n — **описание.
  9.  
  10. Формат вывода
  11. Выведите единственное целое число — размер пересечения множеств слов из запроса и описания.
  12. Примеры
  13.  
  14. ВВОД                                               
  15. tiny cat \n cat without tail                       
  16. ВЫВОД
  17. 1
  18.  
  19. ВВОД
  20. very kind dog with brown fur \n dog with long tail
  21. ВЫВОД
  22. 2
  23.  
  24. */
  25.  
  26. #include <iostream>
  27. #include <vector>
  28. #include <string>
  29. #include <set>
  30.  
  31. using namespace std;
  32.  
  33. // берём данные из вектора и заносим их во множество
  34. set<string> Vector2set(vector<string> query_words){
  35.     set<string> s;
  36.     for(string word: query_words)
  37.         s.insert(word);
  38.        
  39.     return s;
  40. }
  41.  
  42. // узнаем размер множества слов, которые входят и в запрос, и в описание
  43. int CalculateSimilarity(vector<string> first, vector<string> second) {
  44.     set<string> query_set = Vector2set(first);
  45.     set<string> description_set = Vector2set(second);
  46.     set<string> intersection;
  47.    
  48.     for(string word: query_set){
  49.         if(description_set.count(word) > 0){
  50.             intersection.insert(word);
  51.         }
  52.     }
  53.     return intersection.size();
  54. }
  55.  
  56. // выделяем в строке слова и заполняем ими вектор words
  57. vector<string> SplitIntoWords(string text) {
  58.     vector<string> words;
  59.     string word;
  60.     for (int i = 0; i < text.size(); ++i) {
  61.         if (text[i] == ' ') {
  62.             words.push_back(word);
  63.             word = "";
  64.         } else {
  65.             word += text[i];
  66.         }
  67.     }  
  68.     words.push_back(word);
  69.     return words;
  70. }
  71.  
  72. int main() {
  73.     string query, description;
  74.  
  75.     getline(cin, query);
  76.     getline(cin, description);
  77.     cout << CalculateSimilarity(SplitIntoWords(query), SplitIntoWords(description)) << endl;
  78.  
  79.     return 0;
  80. }
RAW Paste Data