Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <ctime>
  7. #include <string>
  8. #include <queue>
  9. #include <unordered_map>
  10. #include <map>
  11. #include <set>
  12.  
  13. #define prev asjdja
  14.  
  15. typedef long long ll;
  16.  
  17. using namespace std;
  18.  
  19. const int INF = 1e6 * 6.25 + 7;
  20.  
  21. void print(vector<int> s){
  22. for (int i = 0; i < s.size(); i++)
  23. cout << s[i] << " ";
  24. cout << "\n";
  25. }
  26.  
  27.  
  28. int main()
  29. {
  30. //freopen("a.in", "r", stdin);
  31. ios_base::sync_with_stdio(0);
  32. cin.tie(0);
  33. int n, k;
  34. cin >> n >> k;
  35. map<string, string> mapa;
  36. for (int i = 0; i < n; i++){
  37. string s1, s2;
  38. cin >> s1 >> s2;
  39. mapa[s1] = s2;
  40. }
  41. cin >> n;
  42. vector<string> s(n);
  43. for (int i = 0; i < n; i++)
  44. cin >> s[i];
  45. sort(s.begin(), s.end());
  46. int cnt = 1;
  47. set<pair<int, string> > lst;
  48. map<string, int> mapa2;
  49. for (int i = 1; i < n; i++){
  50. if (s[i] != s[i - 1]){
  51. lst.insert(make_pair(-cnt, s[i - 1]));
  52. mapa2[s[i - 1]] = cnt;
  53. cnt = 1;
  54. }
  55. else
  56. cnt++;
  57. }
  58. mapa2[s.back()] = cnt;
  59. lst.insert(make_pair(-cnt, s.back()));
  60. vector<string> answer;
  61. while (lst.size() > 0){
  62. pair<int, string> v = *(lst.begin());
  63. lst.erase(v);
  64. v.first *= -1;
  65. if (v.first < k || mapa.find(v.second) == mapa.end()){
  66. for (int i = 0; i < v.first; i++)
  67. answer.push_back(v.second);
  68. mapa2[v.second] = 0;
  69. continue;
  70. }
  71. pair<int, string> u = make_pair(0, mapa[v.second]);
  72. if (mapa2[u.second] != 0)
  73. pair<int, string> u = make_pair(-mapa2[u.second], u.second);
  74. lst.erase(u);
  75. u.first -= v.first / k;
  76. v.first %= k;
  77. mapa2[v.second] = v.first;
  78. mapa2[u.second] = u.first;
  79. lst.insert(u);
  80. v.first *= -1;
  81. lst.insert(v);
  82. }
  83. cout << answer.size() << endl;
  84. for (int i = 0; i < answer.size(); i++)
  85. cout << answer[i] << "\n";
  86. return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement