fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <unordered_map>
  5.  
  6. using namespace std;
  7.  
  8. void checkType(vector<int> &memories, int &ans, int &availableMemory) {
  9. sort(memories.begin(), memories.end());
  10. int i = 0, n = memories.size();
  11. while (i < n) {
  12. if (i == n - 1) {
  13. ans++;
  14. i++;
  15. continue;
  16. }
  17. if (memories[i] + memories[i + 1] <= availableMemory) {
  18. ans++;
  19. i += 2;
  20. }
  21. else {
  22. ans++;
  23. i++;
  24. }
  25. }
  26. }
  27.  
  28. int minimumTime(int availableMemory, vector<int> taskMems, vector<int> taskTypes) {
  29. int n = taskMems.size();
  30. int ans = 0, i, j;
  31. unordered_map<int, vector<int>> tasksOfType;
  32. unordered_map<int, vector<int>>::iterator it;
  33.  
  34. for (int i = 0; i < n; i++) {
  35. tasksOfType[taskTypes[i]].push_back(taskMems[i]);
  36. }
  37.  
  38. for (it = tasksOfType.begin(); it != tasksOfType.end(); it++) {
  39. checkType(it->second, ans, availableMemory);
  40. }
  41.  
  42. return ans;
  43. }
  44.  
  45. int main() {
  46. vector<int> task_memory = {2, 3, 4, 2, 3};
  47. vector<int> task_type = {1, 2, 1, 1, 2};
  48. int max_memory = 5;
  49. cout << minimumTime(max_memory, task_memory, task_type);
  50. return 0;
  51. }
Success #stdin #stdout 0.01s 5308KB
stdin
Standard input is empty
stdout
4