Advertisement
1WaKa_WaKa1

Task G

Apr 7th, 2022
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. typedef pair<char, int> letterWithWeight;
  9.  
  10. int main() {
  11.  
  12.     //Ввод данных
  13.     map<char, int> lettersWeight;
  14.     map<char, int> lettersAmount;
  15.     string input;
  16.     string answer = "";
  17.     cin >> input;
  18.     char key = 'a';
  19.     while (key - 1 != 'z') {
  20.         int temp;
  21.         cin >> temp;
  22.         lettersAmount.insert(make_pair(key, 0));
  23.         lettersWeight.insert(make_pair(key, temp));
  24.         key += 1;
  25.     }
  26.  
  27.     //Тело программы
  28.  
  29.     for (auto i: input) {
  30.         lettersAmount[i] = lettersAmount[i] + 1;
  31.     }
  32.  
  33.     for (auto i: input) {
  34.         if (lettersAmount[i] % 2 != 0) {
  35.             answer.insert(answer.end(), i);
  36.             lettersAmount[i] = lettersAmount[i] - 1;
  37.         }
  38.     }
  39.  
  40.  
  41. //    string temp = "";
  42. //    int positionEnd = answer.size();
  43. //    int prevPosition = positionEnd;
  44. //    for (auto i : input){
  45. //        if (lettersAmount[i] > 0){
  46. //            if (!temp.empty()){
  47. //                temp.insert(temp.begin(), i);
  48. //                positionEnd = positionEnd + 2;
  49. //                prevPosition = positionEnd;
  50. //                lettersAmount[i] = lettersAmount[i] - 2;
  51. //            } else {
  52. //                int index = 0;
  53. //                for (int j = 0; j < temp.size(); j++){
  54. //                    if ((lettersWeight[temp[j]] * positionEnd) > (lettersWeight[i]*positionEnd)){
  55. //                        index +=1;
  56. //                    }
  57. //                }
  58. //                temp.insert(temp.begin() + index, i);
  59. //            }
  60. //        }
  61. //    }
  62.     string partOfAnswer = "";
  63.     int positionEnd = answer.size() + 1;
  64.     while (positionEnd != input.size()) {
  65.         int min = INT64_MAX;
  66.         char temp;
  67.         for (auto p: lettersAmount) {\
  68.             if (p.second > 0) {
  69.                 if (p.second * positionEnd < min) {
  70.                     temp = p.first;
  71.                     min = p.second * positionEnd;
  72.                 }
  73.             }
  74.         }
  75.         lettersAmount[temp] = lettersAmount[temp] - 2;
  76.         partOfAnswer.insert(partOfAnswer.begin(), temp);
  77.         positionEnd +=1;
  78.     }
  79.     cout << partOfAnswer << endl;
  80.  
  81.     //Вывод данных
  82.     cout << answer;
  83.     return 0;
  84. }
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement