Advertisement
Derga

Untitled

Jan 22nd, 2024 (edited)
686
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <numeric>
  4. #include <tuple>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. struct Skill {
  10.     int in_development;
  11.     int in_managment;
  12. };
  13.  
  14. vector<Skill> GetSkills() {
  15.     int ppc; //project participants count
  16.     cin >> ppc;
  17.     vector<Skill> skills(ppc);
  18.     for (Skill& skill : skills) {
  19.         cin >> skill.in_development;
  20.     }
  21.     for (Skill& skill : skills) {
  22.         cin >> skill.in_managment;
  23.     }
  24.     return skills;
  25. }
  26.  
  27. void GetSkillImprovement(vector<Skill>& skills) {
  28.     int participant_number, skill_type, skill_improvement;
  29.     cin >> participant_number >> skill_type >> skill_improvement;
  30.    
  31.     //if (participant_number > skills.size()) throw logic_error("wrong participant number");
  32.     Skill& participant_skill = skills[participant_number - 1];
  33.  
  34.     if (skill_type == 1) participant_skill.in_development += skill_improvement;
  35.     else if (skill_type == 2) participant_skill.in_managment += skill_improvement;
  36.     //else throw logic_error("wrong skill type");
  37. }
  38.  
  39. int GetCurrentTotalBenefitOfAllParticipants(const vector<Skill>& skills) {
  40.     vector<Skill> skills_copy = skills;
  41.     sort(skills_copy.begin(), skills_copy.end(), [](const Skill& lhs, const Skill& rhs) {
  42.         return (lhs.in_development - lhs.in_managment) > (rhs.in_development - rhs.in_managment);
  43.     });
  44.  
  45.     int benefit_of_developers = accumulate(skills_copy.begin(), skills_copy.begin() + skills_copy.size() / 2,
  46.         0, [](int sum, const Skill& skill) {
  47.         return sum + skill.in_development;
  48.     });
  49.    
  50.     int benefit_of_managers = accumulate(skills_copy.begin() + skills_copy.size() / 2, skills_copy.end(),
  51.         0, [](int sum, const Skill& skill) {
  52.         return sum + skill.in_managment;
  53.     });
  54.  
  55.     return benefit_of_developers + benefit_of_managers;
  56. }
  57.  
  58. //O(m * n * log(n)), O(certificates_count * ppc * log(ppc))
  59. int NaiveSolution(vector<Skill>& skills) {
  60.     GetSkillImprovement(skills);
  61.     return GetCurrentTotalBenefitOfAllParticipants(skills);
  62. }
  63.  
  64. int main() {
  65.     ios::sync_with_stdio(0);
  66.     cin.tie(0);
  67.  
  68.     vector<Skill> skills = GetSkills();
  69.     int certificates_count;
  70.     cin >> certificates_count;
  71.     for (int i = 0; i < certificates_count; ++i) {
  72.         cout << NaiveSolution(skills) << '\n';
  73.     }
  74. }
  75.  
  76. /*
  77. test1
  78. 4
  79. 7 15 3 4
  80. 10 10 0 6
  81. 3
  82. 1 1 4
  83. 4 1 6
  84. 2 2 10
  85.  
  86. 34
  87. 35
  88. 43
  89. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement