| Task: | Sukat |
| Sender: | ToukoP |
| Submission time: | 2024-01-20 15:51:17 +0200 |
| Language: | C++ (C++11) |
| Status: | COMPILE ERROR |
Compiler report
In file included from /usr/include/c++/11/map:61,
from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:81,
from input/code.cpp:1:
/usr/include/c++/11/bits/stl_map.h: In instantiation of 'void std::map<_Key, _Tp, _Compare, _Alloc>::insert(_InputIterator, _InputIterator) [with _InputIterator = int; _Key = int; _Tp = int; _Compare = std::less<int>; _Alloc = std::allocator<std::pair<const int, int> >]':
input/code.cpp:31:21: required from here
/usr/include/c++/11/bits/stl_map.h:894:38: error: no matching function for call to 'std::_Rb_tree<int, std::pair<const int, int>, std::_Select1st<std::pair<const int, int> >, std::less<int>, std::allocator<std::pair<const int, int> > >::_M_insert_range_unique(int&, int&)'
894 | { _M_t._M_insert_range_unique(__first, __last); }
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/map:60,
from /usr/include/x86_64-linux-gnu/c++/11/bits/s...Code
#include <bits/stdc++.h>
using namespace std;
int main() {
const int Z = 30;
string str;
cin >> str;
vector<int> sukat;
for (int i = 0; i < (int) str.length(); i++) {
sukat.push_back((int) str[i]);
}
sort(sukat.begin(), sukat.end());
map<int, int> m;
int c1 = 0;
int c2 = 0;
int last = -1;
bool g = true;
for (int i = 0; i < (int) sukat.size(); i++) {
//cout << sukat[i] << " ";
int c = ((int) sukat[i]) - 65;
if (c != last) {
g = c1 < c2;
last = c;
}
if (m.count(c) == 0) {
m.insert(c, 0);
}
if (g) {
m.at(c)++;
c1++;
} else {
m.at(c)++;
c2++;
}
}
//cout << endl;
//cout << s1[0] << s1[1] << s1[2] << endl;
//cout << s2[0] << s2[1] << s2[2] << endl;
vector<pair<char, char>> res;
while (c1 > 0 && c2 > 0) {
int max1 = -1;
int index1 = -1;
int max2 = -1;
int index2 = -1;
for (int i = 0; i < Z; i++) {
int c = m.at(i);
if (c > max1) {
max2 = max1;
index2 = index1;
max1 = c;
index1 = i;
} else if (c > max2) {
max2 = c;
index2 = i;
}
}
//cout << "i1: " << index1 << " i2: " << index2 << endl;
int a = min(max1, max2);
m.at(index1) -= a;
m.at(index2) -= a;
c1 -= a;
c2 -= a;
for (int i = 0; i < a; i++) {
res.push_back({ (char) (index1 + 65), (char) (index2 + 65)});
}
}
cout << res.size() << "\n";
for (int i = 0; i < (int) res.size(); i++) {
cout << res[i].first << res[i].second << "\n";
}
}
