Advertisement
Guest User

Waterfox

a guest
May 27th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. PARKING
  2.  
  3. #include <bits/stdc++.h>
  4.  
  5. using namespace std;
  6.  
  7. int koszt[ 110 ];
  8. int masa[ 2100 ];
  9. int pozycja[ 2100 ]; //gdzie jest zaparkowany
  10.  
  11. int ile_wolnych;
  12. queue <int> kolejka;
  13.  
  14. int drzewo[ 300 ];
  15. int pojemnosc[ 300 ];
  16. int Insert( ) //dodaje a do elementu najbardziej na lewo
  17. {
  18. int w = 1;
  19. while( pojemnosc[ w ] > 1 )
  20. {
  21. int lewy = 2 * w;
  22. int prawy = 2 * w + 1;
  23. if( pojemnosc[ lewy ] > drzewo[ lewy ] ) w = lewy;
  24. else if( pojemnosc[ prawy ] > drzewo[ prawy ] ) w = prawy;
  25. else return -1; //false - drzewo jest pelne
  26. }
  27. int wynik = w;
  28. while( w != 1 )
  29. {
  30. ++drzewo[ w ];
  31. w >>= 1;
  32. }
  33. --ile_wolnych;
  34. return wynik;
  35. }
  36.  
  37. void Usun( int a )
  38. {
  39. while( a != 1 )
  40. {
  41. --drzewo[ a ];
  42. a >>= 1;
  43. }
  44. ++ile_wolnych;
  45. }
  46.  
  47. int main()
  48. {
  49. int n, m, R = 1;
  50. scanf( "%d %d", &n, &m );
  51. ile_wolnych = n;
  52. while( R < n ) R <<= 1;
  53. for( int i = 0; i < n; ++i ) scanf( "%d", koszt + i );
  54. for( int i = 0; i < m; ++i ) scanf( "%d", masa + i );
  55. for( int i = R; i < 2 * R; ++i )
  56. pojemnosc[ i ] = 1;
  57. for( int i = R - 1; i > 0; --i ) pojemnosc[ i ] = pojemnosc[ 2 * i ] + pojemnosc[ 2 * i + 1 ];
  58. long long int wynik = 0;
  59. for( int q = 0; q < 2 * m; ++q )
  60. {
  61. int a;
  62. scanf( "%d", &a );
  63. if( a > 0 )
  64. {
  65. --a;
  66. //przyjazd
  67. if( ile_wolnych )
  68. {
  69. int miejsce = Insert( );
  70. pozycja[ a ] = miejsce - R;
  71. wynik += masa[ a ] * koszt[ pozycja[ a ] ];
  72. }
  73. else
  74. {
  75. kolejka.push( a );
  76. }
  77. }
  78. else
  79. {
  80. ++a;
  81. //odjazd
  82. a = -a;
  83. Usun( pozycja[ a ] + R );
  84. pozycja[ a ] = 0;
  85. if( !kolejka.empty() )
  86. {
  87. a = kolejka.front(); kolejka.pop();
  88. int miejsce = Insert( );
  89. pozycja[ a ] = miejsce - R;
  90. wynik += masa[ a ] * koszt[ pozycja[ a ] ];
  91. }
  92. }
  93. }
  94. printf("%lld", wynik );
  95. }
  96.  
  97.  
  98. KARTY
  99.  
  100. #include <bits/stdc++.h>
  101.  
  102. long double n, l;
  103. long double out;
  104.  
  105. int main ()
  106. {
  107. scanf("%Lf%Lf", &n, &l);
  108. l /= 2;
  109. for(int i = 1; i <= n; i++)
  110. {
  111. out += l / i;
  112. }
  113. printf("%Lf\n", out);
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement