Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // #include <iostream>
- // void Process()
- // {
- // string query_type;
- // cin>>query_type;
- // int start,finish;
- // cin>>start>>finish;
- // if(query_type=="ADD")
- // {
- // routes.AddRoute (start,finish);
- // }
- // else if(query_type=="GO")
- // {
- // cout<<routes.FindNearestFinish(start,finish)<<"\n";
- // }
- // }
- // int main()
- // {
- // int query_count;
- // cin>>query_count;
- // for(int query_id =0;query_id<query_count;++query_id)
- // {
- // Process();
- // }
- // return 0;
- // }
- #include <algorithm>
- #include <map>
- #include <string>
- #include <tuple>
- #include <vector>
- using namespace std;
- // Перечислимый тип для статуса задачи
- enum class TaskStatus {
- NEW, // новая
- IN_PROGRESS, // в разработке
- TESTING, // на тестировании
- DONE // завершена
- };
- using TasksInfo = map<TaskStatus, int>;
- TaskStatus Next(TaskStatus task_status)
- {
- return static_cast<TaskStatus>(static_cast<int>(task_status) + 1);
- }
- using TasksInfo = map<TaskStatus, int>;
- class TeamTasks {
- public:
- const TasksInfo& GetPersonTasksInfo(const string& person) const;
- void AddNewTask(const string& person);
- tuple<TasksInfo, TasksInfo> PerformPersonTasks(const string& person, int task_count);
- private:
- map<string, TasksInfo> person_tasks_;
- };
- const TasksInfo& TeamTasks::GetPersonTasksInfo(const string& person) const
- {
- return person_tasks_.at(person);
- }
- void TeamTasks::AddNewTask(const string& person) {
- ++person_tasks_[person][TaskStatus::NEW];
- }
- void RemoveZeros(TasksInfo& tasks_info) {
- vector<TaskStatus> statuses_to_remove;
- for (const auto& task_item : tasks_info) {
- if (task_item.second == 0) {
- statuses_to_remove.push_back(task_item.first);
- }
- }
- for (const TaskStatus status : statuses_to_remove) {
- tasks_info.erase(status);
- }
- }
- tuple<TasksInfo, TasksInfo> TeamTasks::PerformPersonTasks(const string& person, int task_count) {
- TasksInfo updated_tasks, untouched_tasks;
- const bool has_person = person_tasks_.count(person);////????????????????????????
- TasksInfo& tasks = person_tasks_[person];
- for (TaskStatus status = TaskStatus::NEW;status != TaskStatus::DONE;status = Next(status))
- {
- // Считаем обновлённые
- updated_tasks[Next(status)] = min(task_count, tasks[status]);
- // Считаем, сколько осталось обновить
- task_count -= updated_tasks[Next(status)];
- }
- for (TaskStatus status = TaskStatus::NEW;
- status != TaskStatus::DONE;
- status = Next(status)) {
- untouched_tasks[status] = tasks[status] - updated_tasks[Next(status)];
- tasks[status] += updated_tasks[status] - updated_tasks[Next(status)];
- }
- tasks[TaskStatus::DONE] += updated_tasks[TaskStatus::DONE];
- RemoveZeros(updated_tasks);
- RemoveZeros(untouched_tasks);
- RemoveZeros(person_tasks_.at(person));
- return {updated_tasks, untouched_tasks};
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement