Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. class Eksperyment{
  7. public:
  8. string imie,nazwisko;
  9. int zdolnoscNaukowca;
  10. Eksperyment *after= nullptr;
  11. Eksperyment(string,string,int);
  12. };
  13.  
  14. Eksperyment::Eksperyment(string Imie, string Nazwisko, int zdolnoscNaukowca) {
  15. this->imie = Imie;
  16. this->nazwisko = Nazwisko;
  17. this->zdolnoscNaukowca = zdolnoscNaukowca;
  18. this->after = nullptr;
  19. }
  20.  
  21. class Kolejka{
  22. private:
  23. int maxZdolnoscNaukowca;
  24. int minZdolnoscNaukowca;
  25. int ileMax;
  26. int ileMin;
  27. double srednia1;
  28. void maxNowy();
  29. void minNowy();
  30. public:
  31. Kolejka(int minZdolnoscNaukowca, int maxZdolnoscNaukowca, double srednia1, int ileMax, int ileMin);
  32. Eksperyment *first = nullptr;
  33. Eksperyment *last = nullptr;
  34. unsigned counter = 0;
  35.  
  36. void push(string Imie, string Nazwisko, int zdolnoscNaukowca);
  37. void show();
  38. void pop();
  39. unsigned size();
  40. int getMax();
  41. int getMin();
  42. int getileMax();
  43. int getileMin();
  44. double getsrednia1();
  45. double srednia1Nowa();
  46. };
  47.  
  48. Kolejka::Kolejka(int min, int max, double srednia, int ilemax, int ilemin) {
  49. minZdolnoscNaukowca = min;
  50. maxZdolnoscNaukowca = max;
  51. srednia1 = srednia;
  52. ileMin = ilemin;
  53. ileMax = ilemax;
  54. }
  55.  
  56. void Kolejka::maxNowy() {
  57. Eksperyment *temp = this->first;
  58. int max=0;
  59. while(temp!= nullptr){
  60. if(temp->zdolnoscNaukowca>max){
  61. max=temp->zdolnoscNaukowca;
  62. }
  63. temp = temp->after;
  64. }
  65. maxZdolnoscNaukowca=max;
  66. }
  67.  
  68. void Kolejka::minNowy() {
  69. Eksperyment *temp = this->first;
  70. int min=1001;
  71. while(temp!= nullptr){
  72. if(temp->zdolnoscNaukowca<min){
  73. min=temp->zdolnoscNaukowca;
  74. }
  75. temp = temp->after;
  76. }
  77. minZdolnoscNaukowca = min;
  78. }
  79.  
  80. double Kolejka::srednia1Nowa(){
  81. Eksperyment *temp = this->first;
  82. int counter=0;
  83. srednia1=0;
  84. while(temp!= nullptr){
  85. srednia1+= temp->zdolnoscNaukowca;
  86. counter++;
  87. temp = temp->after;
  88. }
  89. srednia1=srednia1/counter;
  90. return srednia1;
  91. }
  92.  
  93. void Kolejka::push(string Imie, string Nazwisko, int zdolnoscNaukowca) {
  94. Eksperyment *nowyEksperyment = new Eksperyment(Imie, Nazwisko, zdolnoscNaukowca);
  95. if(this->first == nullptr || this->last == nullptr){
  96. this->first = this->last = nowyEksperyment;
  97. }else{
  98. this->last->after = nowyEksperyment;
  99. this->last = nowyEksperyment;
  100. }
  101.  
  102. if(zdolnoscNaukowca==minZdolnoscNaukowca){
  103. ileMin++;
  104. }
  105. if(zdolnoscNaukowca==maxZdolnoscNaukowca){
  106. ileMax++;
  107. }
  108.  
  109. if(zdolnoscNaukowca<minZdolnoscNaukowca){
  110. minZdolnoscNaukowca=zdolnoscNaukowca;
  111. ileMin=0;
  112. }
  113. if(zdolnoscNaukowca>maxZdolnoscNaukowca){
  114. maxZdolnoscNaukowca=zdolnoscNaukowca;
  115. ileMax=0;
  116. }
  117. counter++;
  118. }
  119.  
  120. void Kolejka::show() {
  121. Eksperyment *temp = this->first;
  122. while(temp!= nullptr){
  123. cout << temp->imie << " " << temp->nazwisko <<"\n";
  124. temp = temp->after;
  125. }
  126. }
  127.  
  128. void Kolejka::pop() {
  129. int tempZdolnoscNaukowa = 0;
  130. if (this->first != nullptr) {
  131. Eksperyment *temp = this->first;
  132. this->first = this->first->after;
  133. tempZdolnoscNaukowa = temp->zdolnoscNaukowca;
  134. }counter--;
  135. if(tempZdolnoscNaukowa==maxZdolnoscNaukowca && ileMax==0){
  136. maxNowy();
  137. }else if(tempZdolnoscNaukowa==maxZdolnoscNaukowca && ileMax>0){
  138. ileMax--;
  139. }
  140. if(tempZdolnoscNaukowa==minZdolnoscNaukowca && ileMin==0){
  141. minNowy();
  142. }else if(tempZdolnoscNaukowa==minZdolnoscNaukowca && ileMin>0){
  143. ileMin--;
  144. }
  145. }
  146.  
  147. unsigned Kolejka::size() {
  148. return counter;
  149. }
  150.  
  151. int Kolejka::getMax() {
  152. return maxZdolnoscNaukowca;
  153. }
  154.  
  155. int Kolejka::getMin() {
  156. return minZdolnoscNaukowca;
  157. }
  158.  
  159. int Kolejka::getileMax() {
  160. return ileMax;
  161. }
  162.  
  163. int Kolejka::getileMin() {
  164. return ileMin;
  165. }
  166.  
  167. double Kolejka::getsrednia1() {
  168. return srednia1;
  169. }
  170.  
  171. int main() {
  172. ios_base::sync_with_stdio(false);
  173.  
  174. auto *k = new Kolejka(1001,0,0,0,0);
  175. auto *k2 = new Kolejka(1001,0,0,0,0);
  176. Eksperyment *temp, *temp2;
  177. int iloscNaukowcow, maksymalnaRoznicaZdolnosci, zdolnoscNaukowca;
  178. string imie, nazwisko;
  179.  
  180. cin >> iloscNaukowcow >> maksymalnaRoznicaZdolnosci;
  181. for (int i = 0; i < iloscNaukowcow/2; ++i) {
  182. cin >> imie >> nazwisko >> zdolnoscNaukowca;
  183. k->push(imie, nazwisko, zdolnoscNaukowca);
  184. }
  185. k->srednia1Nowa();
  186. for (int i = 0; i < iloscNaukowcow/2; ++i) {
  187. cin >> imie >> nazwisko >> zdolnoscNaukowca;
  188. k2->push(imie, nazwisko, zdolnoscNaukowca);
  189. }
  190. k2->srednia1Nowa();
  191.  
  192. int roznicaK1 = k->getMax() - k->getMin();
  193. int roznicaK2 = k2->getMax() - k2->getMin();
  194. int noweI=0;
  195. int noweI2=0;
  196. double najnizszaRoznicaSrednich=1001;
  197.  
  198.  
  199. for (int i = 1; i <= iloscNaukowcow/2; ++i){
  200. if(k->getsrednia1()- k2->getsrednia1() ==0) {
  201. k->show();
  202. cout<<"\n";
  203. k2->show();
  204. return 0;
  205. }
  206. if(najnizszaRoznicaSrednich>abs(k->getsrednia1()- k2->getsrednia1()) && (k->getMax() - k->getMin())<=maksymalnaRoznicaZdolnosci && (k2->getMax() - k2->getMin())<=maksymalnaRoznicaZdolnosci) {
  207. najnizszaRoznicaSrednich = abs(k->getsrednia1()- k2->getsrednia1());
  208. noweI2=i;
  209. }
  210. temp = k->first;
  211. temp2 = k2->first;
  212. k2->push(temp->imie,temp->nazwisko,temp->zdolnoscNaukowca);
  213. k->push(temp2->imie,temp2->nazwisko,temp2->zdolnoscNaukowca);
  214. k2->pop();
  215. k->pop();
  216. if(roznicaK1+roznicaK2 > (k->getMax() - k->getMin())+(k2->getMax() - k2->getMin())){
  217. roznicaK1 = k->getMax() - k->getMin();
  218. roznicaK2 = k2->getMax() - k2->getMin();
  219. noweI=i;
  220. }
  221. k->srednia1Nowa();
  222. k2->srednia1Nowa();
  223. }
  224.  
  225. if(roznicaK1>maksymalnaRoznicaZdolnosci || roznicaK2>maksymalnaRoznicaZdolnosci){
  226. cout<<"NIE";
  227. return 0;
  228. }
  229.  
  230. if(noweI2<noweI) {
  231. for (int i = 0; i < iloscNaukowcow / 2 + noweI2; i++) {
  232. temp = k->first;
  233. temp2 = k2->first;
  234. k2->push(temp->imie, temp->nazwisko, temp->zdolnoscNaukowca);
  235. k->push(temp2->imie, temp2->nazwisko, temp2->zdolnoscNaukowca);
  236. k2->pop();
  237. k->pop();
  238. }
  239. }
  240.  
  241.  
  242. for (int i = 0; i < noweI; i++) {
  243. temp = k2->first;
  244. k->push(temp->imie, temp->nazwisko, temp->zdolnoscNaukowca);
  245. k2->pop();
  246. }
  247. k2->show();
  248. for (int i = 0; i < noweI; i++) {
  249. temp = k->first;
  250. cout << temp->imie << " " << temp->nazwisko << "\n";
  251. k->pop();
  252. }
  253. cout << "\n";
  254. k->show();
  255.  
  256. return 0;
  257. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement