Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <vector>
- #include <map>
- #include <set>
- #include <algorithm>
- using namespace std;
- double meas_simm(set<string> set1, set<string> set2){
- set<string> s3;
- set<string> s4;
- set_intersection(set1.begin(), set1.end(), set2.begin(), set2.end(), inserter(s3, s3.begin()));
- set_union(set1.begin(), set1.end(), set2.begin(), set2.end(), inserter(s4, s4.begin()));
- return (double)s3.size() / (double) s4.size();
- }
- int main(){
- ifstream file("count_big.txt"); //C:\Users\wasya\CLionProjects\servak
- string word;
- int rate;
- map<string, pair<set<string>, int>> count_big;
- string wordInc;
- while (file >> word && file >> rate){
- set<string> set;
- if (word.size() == 1) {
- set.insert(word);
- auto para1 = make_pair(set, rate);
- auto para = make_pair(word, para1);
- count_big.insert(para);
- continue;
- } else {
- for (int i = 0; i < word.size() - 1; i++) {
- set.insert(word.substr(i, 2));
- }
- }
- auto para1 = make_pair(set, rate);
- auto para = make_pair(word, para1);
- count_big.insert(para);
- }
- while (cin >> wordInc){
- set<string> set;
- if (wordInc.size() == 1){
- set.insert(wordInc);
- } else {
- for (int i = 0; i < wordInc.size() - 1; i++){
- set.insert(wordInc.substr(i, 2));
- }
- }
- double koef = 0;
- string output;
- int rate = 0;
- for (auto pair : count_big){
- double measure = meas_simm(set, pair.second.first);
- if (measure > koef){
- koef = measure;
- output = pair.first;
- rate = pair.second.second;
- } else if (measure == koef){
- if (rate < pair.second.second){
- koef = measure;
- output = pair.first;
- rate = pair.second.second;
- } else if (rate == pair.second.second){
- if (pair.first < output){
- koef = measure;
- output = pair.first;
- rate = pair.second.second;
- }
- }
- }
- }
- cout << output << endl;
- }
- file.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement