Advertisement
informaticage

Greedy implemetnation of ois plugs with structs

Jan 26th, 2024
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.94 KB | None | 0 0
  1. /*
  2. *
  3. * Current Complexity: Θ ( NLogN )
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <iostream>
  8. #include <algorithm>
  9. #include <limits.h>
  10.  
  11. #define DEBUGNO
  12.  
  13. using namespace std;
  14.  
  15. // Definiamo un tipo di dato server che associa ad un server la relativa potenza
  16. typedef struct {
  17. int flops;
  18. string plug;
  19. } server;
  20.  
  21. bool byFlops ( server s1, server s2 ) {
  22. return s1.flops > s2.flops;
  23. }
  24.  
  25. int main ( void ) {
  26. freopen( "input.txt", "r", stdin );
  27. freopen( "output.txt", "w", stdout );
  28.  
  29. // Quantità di muffin
  30. int serverAmount;
  31.  
  32. // Dimensione della pala
  33. int plugsAmount;
  34.  
  35. cin >> serverAmount >> plugsAmount;
  36.  
  37. // Lista di server
  38. int serverList [ serverAmount ];
  39.  
  40. // Leggiamo i server in input
  41. string serverPlugsList [ serverAmount ];
  42. for ( int i = 0; i < serverAmount; i++ )
  43. cin >> serverList [ i ];
  44.  
  45. // Leggiamo le prese dei server in input
  46. for ( int i = 0; i < serverAmount; i++ )
  47. cin >> serverPlugsList [ i ];
  48.  
  49. // Leggiamo le prese
  50. int L10 = 0, L16 = 0, bipasso = 0;
  51. string presa;
  52.  
  53. for ( int i = 0; i < plugsAmount; i++ ) {
  54. cin >> presa;
  55.  
  56. if ( presa == "L10" )
  57. L10 ++;
  58.  
  59. if ( presa == "L16" )
  60. L16 ++;
  61.  
  62. if ( presa == "bipasso" )
  63. bipasso ++;
  64. }
  65.  
  66. // Riempiamo un array di 'server' con i dati presi in input
  67. server serverListAssoc [ serverAmount ];
  68. for ( int i = 0; i < serverAmount; i++ ) {
  69. serverListAssoc[ i ].flops = serverList[ i ];
  70. serverListAssoc[ i ].plug = serverPlugsList[ i ];
  71. }
  72.  
  73. // Ordiniamo per FLOPS l'array di server
  74. sort ( serverListAssoc, serverListAssoc + serverAmount, byFlops );
  75.  
  76. #ifdef DEBUG
  77. cout << "Risultato dell'ordinamento: " << endl;
  78. for ( int i = 0; i < serverAmount; i++ ) {
  79. cout << serverListAssoc[ i ].flops << " " << serverListAssoc[ i ].plug << endl;
  80. }
  81. #endif // DEBUG
  82.  
  83. int finalFlops = 0;
  84. #ifdef DEBUG
  85. cout << "Prese diponibili: " << endl << "L10 = " << L10 << endl << "L16 = " << L16 << endl << "Bipasso " << bipasso << endl;
  86. #endif // DEBUG
  87. /** Ciclamo per i server con approccio goloso **/
  88. for ( int i = 0; i < serverAmount ; i++ ) {
  89.  
  90. /// Se troviamo un server L10 diminuiamo il numero di prese L10
  91. if ( L10 > 0 && serverListAssoc[ i ].plug == "L10" ) {
  92. #ifdef DEBUG
  93. cout << "Server collegato: " << serverListAssoc[ i ].flops << " con presa: " << serverListAssoc[ i ].plug << endl;
  94. #endif // DEBUG
  95. L10--;
  96. finalFlops = finalFlops + serverListAssoc[ i ].flops;
  97. serverListAssoc[ i ].flops = 0;
  98. }
  99.  
  100.  
  101. if ( L16 > 0 && serverListAssoc[ i ].plug == "L16" ) {
  102. #ifdef DEBUG
  103. cout << "Server collegato: " << serverListAssoc[ i ].flops << " con presa: " << serverListAssoc[ i ].plug << endl;
  104. #endif // DEBUG
  105. L16--;
  106. finalFlops = finalFlops + serverListAssoc[ i ].flops;
  107. serverListAssoc[ i ].flops = 0;
  108. }
  109. #ifdef DEBUG
  110. cout << "Prese diponibili: " << endl << "L10 = " << L10 << endl << "L16 = " << L16 << endl << "Bipasso " << bipasso << endl;
  111. #endif // DEBUG
  112. }
  113. #ifdef DEBUG
  114. cout << "Flops assegnati obbligatoriamente " << finalFlops << endl;
  115. #endif // DEBUG
  116.  
  117. // Ri riordiniamo per FLOPS l'array di server
  118. sort ( serverListAssoc, serverListAssoc + serverAmount, byFlops );
  119.  
  120. #ifdef DEBUG
  121. cout << "Risultato dell'ordinamento 2: " << endl;
  122. #endif // DEBUG
  123. for ( int i = 0; i < bipasso; i++ ) {
  124. #ifdef DEBUG
  125. cout << serverListAssoc[ i ].flops << " " << serverListAssoc[ i ].plug << endl;
  126. #endif // DEBUG
  127. finalFlops = finalFlops + serverListAssoc[ i ].flops;
  128. }
  129.  
  130. #ifdef DEBUG
  131. cout << "Flops totali: ";
  132. #endif
  133. cout << finalFlops;
  134.  
  135. return 0;
  136. }
  137.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement