Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #include <cmath>
- #include <algorithm>
- #include <ctime>
- #include <string>
- #include <queue>
- #include <unordered_map>
- #include <map>
- #include <set>
- #define prev asjdja
- typedef long long ll;
- using namespace std;
- const int INF = 1e6 * 6.25 + 7;
- void print(vector<int> s){
- for (int i = 0; i < s.size(); i++)
- cout << s[i] << " ";
- cout << "\n";
- }
- int main()
- {
- //freopen("a.in", "r", stdin);
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- int n, k;
- cin >> n >> k;
- map<string, string> mapa;
- for (int i = 0; i < n; i++){
- string s1, s2;
- cin >> s1 >> s2;
- mapa[s1] = s2;
- }
- cin >> n;
- vector<string> s(n);
- for (int i = 0; i < n; i++)
- cin >> s[i];
- sort(s.begin(), s.end());
- int cnt = 1;
- set<pair<int, string> > lst;
- map<string, int> mapa2;
- for (int i = 1; i < n; i++){
- if (s[i] != s[i - 1]){
- lst.insert(make_pair(-cnt, s[i - 1]));
- mapa2[s[i - 1]] = cnt;
- cnt = 1;
- }
- else
- cnt++;
- }
- mapa2[s.back()] = cnt;
- lst.insert(make_pair(-cnt, s.back()));
- vector<string> answer;
- while (lst.size() > 0){
- pair<int, string> v = *(lst.begin());
- lst.erase(v);
- v.first *= -1;
- if (v.first < k || mapa.find(v.second) == mapa.end()){
- for (int i = 0; i < v.first; i++)
- answer.push_back(v.second);
- mapa2[v.second] = 0;
- continue;
- }
- pair<int, string> u = make_pair(0, mapa[v.second]);
- if (mapa2[u.second] != 0)
- pair<int, string> u = make_pair(-mapa2[u.second], u.second);
- lst.erase(u);
- u.first -= v.first / k;
- v.first %= k;
- mapa2[v.second] = v.first;
- mapa2[u.second] = u.first;
- lst.insert(u);
- v.first *= -1;
- lst.insert(v);
- }
- cout << answer.size() << endl;
- for (int i = 0; i < answer.size(); i++)
- cout << answer[i] << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement