Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. #define Pi 3,14
  8.  
  9. struct comp{
  10. int d;
  11. int c;
  12. int vol;
  13. int partVol;
  14. };
  15.  
  16.  
  17. struct load{
  18. int t;
  19. int num;
  20. int weight;
  21. };
  22.  
  23.  
  24.  
  25. int main()
  26. {
  27. int n, k, h, v, m, x;
  28. cin >> n >> m >> k >> h >> v;
  29.  
  30. //отсеки
  31. vector <comp> compartsments;
  32. for (int i = 0; i < n; i++){
  33. comp z;
  34. cin >> x;
  35. z.d = x;
  36. cin >> x;
  37. z.c = x;
  38. z.vol = (Pi * z.d * z.d * z.c) / 4;
  39. z.partVol = 0;
  40. compartsments.push_back(z);
  41. }
  42.  
  43. //плотности
  44. vector <int> density;
  45. for (int i = 0; i < m; i++){
  46. cin >> x;
  47. density.push_back(x);
  48. }
  49.  
  50. //загрузка
  51. vector <load> loading;
  52. for (int i = 0; i < k; i++){
  53. load z;
  54. cin >> x;
  55. z.t = x;
  56. cin >> x;
  57. z.num = x;
  58. cin >> x;
  59. z.weight = x;
  60. loading.push_back(z);
  61. }
  62. sort(loading.begin(), loading.end(), [](const load &q, const load &w){return (q.t < w.t);});
  63.  
  64. //вывод
  65. vector <vector<int>> answer;
  66. vector <int> layers;
  67.  
  68. //работа трубопровода и печи
  69. int cnt = 0, nc = 0;//номер загрузки и самый верхний занятый отсек
  70. bool chek = true;
  71. int lastType = -1, level = 0;
  72. for (int i = 1; i <= 24; i++){
  73. if (loading[cnt].t == i){
  74. int V = loading[cnt].weight / density[loading[cnt].num - 1];
  75. while(1){
  76. if (compartsments[nc].vol - compartsments[nc].partVol < V){
  77. V = V - compartsments[nc].vol + compartsments[nc].partVol;
  78. compartsments[nc].partVol = compartsments[nc].vol;
  79. level+=compartsments[nc].c;
  80. nc++;
  81. }else{
  82. compartsments[nc].partVol = V;
  83. level += 4 * V / (Pi * compartsments[nc].d * compartsments[nc].d);
  84. break;
  85. }
  86. if (nc == n){
  87. chek = false;
  88. break;
  89. }
  90. }
  91. if (!chek)
  92. break;
  93.  
  94. if (lastType != -1){
  95. if (lastType == loading[cnt].num)
  96. layers[layers.size() - 1] = level;
  97. else{
  98. layers.push_back(level);
  99. lastType = loading[cnt].num;
  100. }
  101. }else
  102. lastType = loading[cnt].num;
  103. cnt++;
  104. }
  105.  
  106.  
  107.  
  108. if (i % h == 0){
  109. int V = v;
  110. while(1){
  111. if (compartsments[nc].partVol < V){
  112. V = V - compartsments[nc].vol + compartsments[nc].partVol;
  113. compartsments[nc].partVol = 0;
  114. level-=compartsments[nc].c;
  115. nc--;
  116. layers.erase(layers.end());
  117. }else{
  118. compartsments[nc].partVol = compartsments[nc].vol - V;
  119. level -= 4 * V / (Pi * compartsments[nc].d * compartsments[nc].d);
  120. break;
  121. }
  122. if (nc == -1){
  123. break;
  124. }
  125. }
  126. }
  127.  
  128. answer.push_back(layers);
  129. }
  130.  
  131. if (!chek)
  132. cout << "NO";
  133. else{
  134. cout << "YES" << endl;
  135. for (auto i: answer){
  136. chek = false;
  137. for (auto j : i){
  138. cout << j << " ";
  139. chek = true;
  140. }
  141. if (!chek)
  142. cout << -1;
  143. cout << endl;
  144. }
  145. }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement