Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <numeric>
- #include <tuple>
- #include <vector>
- using namespace std;
- struct Skill {
- int in_development;
- int in_managment;
- };
- vector<Skill> GetSkills() {
- int ppc; //project participants count
- cin >> ppc;
- vector<Skill> skills(ppc);
- for (Skill& skill : skills) {
- cin >> skill.in_development;
- }
- for (Skill& skill : skills) {
- cin >> skill.in_managment;
- }
- return skills;
- }
- void GetSkillImprovement(vector<Skill>& skills) {
- int participant_number, skill_type, skill_improvement;
- cin >> participant_number >> skill_type >> skill_improvement;
- //if (participant_number > skills.size()) throw logic_error("wrong participant number");
- Skill& participant_skill = skills[participant_number - 1];
- if (skill_type == 1) participant_skill.in_development += skill_improvement;
- else if (skill_type == 2) participant_skill.in_managment += skill_improvement;
- //else throw logic_error("wrong skill type");
- }
- int GetCurrentTotalBenefitOfAllParticipants(const vector<Skill>& skills) {
- vector<Skill> skills_copy = skills;
- sort(skills_copy.begin(), skills_copy.end(), [](const Skill& lhs, const Skill& rhs) {
- return (lhs.in_development - lhs.in_managment) > (rhs.in_development - rhs.in_managment);
- });
- int benefit_of_developers = accumulate(skills_copy.begin(), skills_copy.begin() + skills_copy.size() / 2,
- 0, [](int sum, const Skill& skill) {
- return sum + skill.in_development;
- });
- int benefit_of_managers = accumulate(skills_copy.begin() + skills_copy.size() / 2, skills_copy.end(),
- 0, [](int sum, const Skill& skill) {
- return sum + skill.in_managment;
- });
- return benefit_of_developers + benefit_of_managers;
- }
- //O(m * n * log(n)), O(certificates_count * ppc * log(ppc))
- int NaiveSolution(vector<Skill>& skills) {
- GetSkillImprovement(skills);
- return GetCurrentTotalBenefitOfAllParticipants(skills);
- }
- int main() {
- ios::sync_with_stdio(0);
- cin.tie(0);
- vector<Skill> skills = GetSkills();
- int certificates_count;
- cin >> certificates_count;
- for (int i = 0; i < certificates_count; ++i) {
- cout << NaiveSolution(skills) << '\n';
- }
- }
- /*
- test1
- 4
- 7 15 3 4
- 10 10 0 6
- 3
- 1 1 4
- 4 1 6
- 2 2 10
- 34
- 35
- 43
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement