Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <algorithm>
- #include <fstream>
- #include <map>
- using namespace std;
- long N, K;
- typedef class task {
- public:
- long S;
- string name;
- bool operator< (const task& rhs) const {
- return S < rhs.S;
- }
- } task;
- typedef class blockchain {
- public:
- long k;
- vector<task> T;
- blockchain () {}
- blockchain (long _k) : k(_k), T(vector<task> ()) {}
- bool operator< (const blockchain& rhs) const{
- return k < rhs.k;
- }
- } blockchain;
- inline char inc (char in)
- {
- return ((in - 65 + K) % 26) + 65;
- }
- int main ()
- {
- cin.tie (0);
- ios_base::sync_with_stdio (false);
- //ifstream cin("uzduotys.in");
- cin >> N >> K;
- auto T = vector<task> (N);
- for (long i = 0; i < N; i++)
- {
- cin >> T[i].name >> T[i].S;
- }
- sort (T.begin (), T.end());
- auto M = map<char, multimap<long, blockchain> > ();
- for (long i = 0; i < K; i++)
- {
- char c = 65 + (i % 26);
- M[c].insert (make_pair (0, blockchain (i)));
- }
- for (auto& item : T)
- {
- auto& c = M[item.name[0]];
- auto it = c.begin ();
- if (it != c.end ())
- {
- auto& vec = it->second.T;
- if (vec.empty() || vec[vec.size() - 1].S < item.S)
- {
- vec.push_back (item);
- M[inc (item.name[0])].insert (make_pair (vec.size (), it->second));
- c.erase (it);
- }
- }
- }
- auto V = vector<blockchain*> (K);
- pair<long, long> mini;
- bool found = false;
- for (auto& it : M)
- {
- for (auto& el : it.second)
- {
- V[el.second.k] = &el.second;
- auto tmp = make_pair(el.first, el.second.k);
- if (found == false || mini > tmp)
- {
- mini = tmp;
- found = true;
- }
- }
- }
- cout << K * mini.first + mini.second << '\n';
- for (long i = 0; i < mini.first; i++)
- {
- for (long j = 0; j < K; j++)
- {
- cout << V[j]->T[i].name << '\n';
- }
- }
- for (long i = 0; i < mini.second; i++)
- {
- cout << V[i]->T[mini.first].name << '\n';
- }
- //cin.close ();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement