中级农民
- 积分
- 123
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-2-18
- 最后登录
- 1970-1-1
|
我试着写了一下....- int printtask2(string tasks,int coldTime) {
- int n = tasks.size();
- if (n == 0)
- return 0;
- unordered_map<char, int> map;
- unordered_map<char, int> freq;
- for (int task:tasks)
- freq[task]++;
- priority_queue<pair<char, int>, vector<pair<char, int>>, cmp2> Q;
- for (auto it = freq.begin(); it != freq.end(); it++)
- Q.push({it->first, it->second});
- int mTime = 0;
- vector<int> order;
- while (!Q.empty()) {
- priority_queue<pair<char, int>, vector<pair<char, int>>, cmp2> tmp;
- auto task = Q.top();
- Q.pop();
- while (map.find(task.first) != map.end() && map[task.first] + coldTime > mTime &&!Q.empty())
- {
- tmp.push(task);
- task = Q.top();
- Q.pop();
- }
- if (map.find(task.first) == map.end() || map[task.first] + coldTime <= mTime)
- {
- map[task.first] = ++mTime;
- if (task.second-- > 1)
- Q.push(task);
- cout << task.first << " ";
- }
- else
- {
- tmp.push(task);
- task = tmp.top();
- tmp.pop();
- int prev = mTime;
- mTime = max(mTime,map[task.first]+coldTime);
- for(;prev<mTime;prev++)
- cout<<" _ ";
- map[task.first] = ++mTime;
- if(task.second-->1)
- Q.push(task);
- cout << task.first<<" ";
- }
- while (!tmp.empty()) {
- Q.push(tmp.top());
- tmp.pop();
- }
- }
- return mTime;
- }
复制代码 |
|