Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.09 KB | None | 0 0
  1. /*
  2. Стартапы - 3
  3.  
  4. Как это часто бывает, стартапы вырастают, сливаются с кем-то, ну или на крайняк продаются большим компаниям. Как бы там ни было, заказчик снова попросил изменить нашу программу в связи с изменением структуры.
  5. Его компания стала сильно больше, поэтому добавились менеджеры между ним и тимлидами - мидлы. Их зарплата считается как ставка 50 у.е. плюс 2 у.е. за каждого подчиненного.
  6. Кроме этого, он оценил ваш очень удобный функциоал по подсчету зарплат, однако заметил, что чаще всего именно он получает самую большую зарплату, поэтому попросил вас не учитывать его в подсчетах. Также для его гениальной иновационной задумки - доски почета, ему нужен теперь не один человек с самой большой зарплатой, а рейтинг всех сотрудников, кроме него.
  7.  
  8. Входные данные:
  9. ... (то же самое)
  10.  
  11. Выходные данные:
  12. Выведите в первой строке общее количество у.е. на выплату зарплат, а далее рейтинг всех сотрудников, кроме CEO (список, отсортированный по убыванию зарплаты).
  13.  
  14. Примечание:
  15. Не забывайте про полиморфизм и очищение памяти.
  16. */
  17.  
  18. #include <iostream>
  19. #include <vector>
  20. #include <string>
  21.  
  22. using namespace std;
  23.  
  24. class Worker {
  25. protected:
  26. string name;
  27. int rate;
  28. public:
  29. Worker(string n, int r = 10) : name(n), rate(r) {}
  30. virtual void info() {
  31. cout << "Worker " << name << ": " << rate << endl;
  32. }
  33. virtual int get_salary() {
  34. return rate;
  35. }
  36. virtual int type() {
  37. return 3;
  38. }
  39. };
  40.  
  41. class Manager : public Worker {
  42. protected:
  43. int staff;
  44. public:
  45. Manager(string n, int s, int r) : staff(s), Worker(n, r) {}
  46. virtual void info() {
  47. cout << "Manager " << name << ": " << rate
  48. << ". Works with " << staff << " people" << endl;
  49. }
  50. };
  51.  
  52. class TeamLeader : public Manager {
  53. public:
  54. TeamLeader(string n, int s, int r = 20) : Manager(n, s, r) {}
  55. virtual int get_salary() {
  56. return rate + (staff + 1) / 2;
  57. }
  58. virtual int type() {
  59. return 2;
  60. }
  61. };
  62.  
  63. class Middle : public Manager {
  64. public:
  65. Middle(string n, int s, int r = 50) : Manager(n, s, r) {}
  66. virtual int get_salary() {
  67. return rate + staff * 2;
  68. }
  69. virtual int type() {
  70. return 1;
  71. }
  72. };
  73.  
  74. class CEO : public Manager {
  75. public:
  76. CEO(string n, int s, int r = 100) : Manager(n, s, r) {}
  77. virtual void info() {
  78. cout << "CEO " << name << ": " << rate
  79. << ". Works with " << staff << " people" << endl;
  80. }
  81. virtual int type() {
  82. return 0;
  83. }
  84. };
  85.  
  86. void swap(Worker* &a, Worker* &b) {
  87. Worker* tmp = a;
  88. a = b;
  89. b = tmp;
  90. return;
  91. }
  92.  
  93. int main() {
  94. int m;
  95. cin >> m;
  96. vector<Worker*> company;
  97. Worker* tmp;
  98. string com, n;
  99. int s;
  100. for (int i = 0; i < m; i++) {
  101. cin >> com >> n;
  102. if (com == "worker") {
  103. tmp = new Worker(n);
  104. company.push_back(tmp);
  105. } else if (com == "teamleader") {
  106. cin >> s;
  107. tmp = new TeamLeader(n, s);
  108. company.push_back(tmp);
  109. } else if (com == "middle") {
  110. cin >> s;
  111. tmp = new Middle(n, s);
  112. company.push_back(tmp);
  113. } else if (com == "ceo") {
  114. cin >> s;
  115. tmp = new CEO(n, s);
  116. company.push_back(tmp);
  117. }
  118. }
  119.  
  120. int sum = 0;
  121. for (int i = 0; i < company.size(); i++) {
  122. sum += company[i]->get_salary();
  123. }
  124.  
  125. for (int j = 0; j < company.size() - 1; j++) {
  126. bool f = false;
  127. for (int i = 0; i < company.size() - j - 1; i++) {
  128. if (company[i]->get_salary() < company[i + 1]->get_salary()) {
  129. swap(company[i], company[i + 1]);
  130. f = true;
  131. }
  132. }
  133. if (!f) break;
  134. }
  135.  
  136. cout << sum << endl;
  137. for (int i = 0; i < company.size(); i++) {
  138. if (company[i]->type() != 0)
  139. company[i]->info();
  140. }
  141.  
  142. for (int i = 0; i < company.size(); i++) {
  143. delete company[i];
  144. }
  145. return 0;
  146. }
  147.  
  148. /*Пример теста:
  149. Вход:
  150. 5
  151. worker Vanya
  152. teamleader Petya 1
  153. ceo Vasya 1
  154. middle Serega 2
  155. teamleader Moisha 0
  156.  
  157.  
  158. Выход:
  159. 205
  160. Manager Serega: 50. Works with 2 people
  161. Manager Petya: 20. Works with 1 people
  162. Manager Moisha: 20. Works with 0 people
  163. Worker Vanya: 10
  164. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement