fork download
  1. #pragma GCC optimize ("Ofast")
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. void*wmem;
  5. char memarr[96000000];
  6. template<class T> inline void walloc1d(T **arr, int x, void **mem = &wmem){
  7. static int skip[16] = {0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
  8. (*mem) = (void*)( ((char*)(*mem)) + skip[((unsigned long long)(*mem)) & 15] );
  9. (*arr)=(T*)(*mem);
  10. (*mem)=((*arr)+x);
  11. }
  12. template<class T> inline void walloc1d(T **arr, int x1, int x2, void **mem = &wmem){
  13. walloc1d(arr, x2-x1, mem);
  14. (*arr) -= x1;
  15. }
  16. template<class T1> void sortA_L(int N, T1 a[], void *mem = wmem){
  17. sort(a, a+N);
  18. }
  19. template<class T1> void rsortA_L(int N, T1 a[], void *mem = wmem){
  20. sortA_L(N, a, mem);
  21. reverse(a, a+N);
  22. }
  23. inline int my_getchar_unlocked(){
  24. static char buf[1048576];
  25. static int s = 1048576;
  26. static int e = 1048576;
  27. if(s == e && e == 1048576){
  28. e = fread_unlocked(buf, 1, 1048576, stdin);
  29. s = 0;
  30. }
  31. if(s == e){
  32. return EOF;
  33. }
  34. return buf[s++];
  35. }
  36. inline void rd(int &x){
  37. int k;
  38. int m=0;
  39. x=0;
  40. for(;;){
  41. k = my_getchar_unlocked();
  42. if(k=='-'){
  43. m=1;
  44. break;
  45. }
  46. if('0'<=k&&k<='9'){
  47. x=k-'0';
  48. break;
  49. }
  50. }
  51. for(;;){
  52. k = my_getchar_unlocked();
  53. if(k<'0'||k>'9'){
  54. break;
  55. }
  56. x=x*10+k-'0';
  57. }
  58. if(m){
  59. x=-x;
  60. }
  61. }
  62. struct MY_WRITER{
  63. char buf[1048576];
  64. int s;
  65. int e;
  66. MY_WRITER(){
  67. s = 0;
  68. e = 1048576;
  69. }
  70. ~MY_WRITER(){
  71. if(s){
  72. fwrite_unlocked(buf, 1, s, stdout);
  73. }
  74. }
  75. }
  76. ;
  77. MY_WRITER MY_WRITER_VAR;
  78. void my_putchar_unlocked(int a){
  79. if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){
  80. fwrite_unlocked(MY_WRITER_VAR.buf, 1, MY_WRITER_VAR.s, stdout);
  81. MY_WRITER_VAR.s = 0;
  82. }
  83. MY_WRITER_VAR.buf[MY_WRITER_VAR.s++] = a;
  84. }
  85. inline void wt_L(char a){
  86. my_putchar_unlocked(a);
  87. }
  88. inline void wt_L(int x){
  89. int s=0;
  90. int m=0;
  91. char f[10];
  92. if(x<0){
  93. m=1;
  94. x=-x;
  95. }
  96. while(x){
  97. f[s++]=x%10;
  98. x/=10;
  99. }
  100. if(!s){
  101. f[s++]=0;
  102. }
  103. if(m){
  104. my_putchar_unlocked('-');
  105. }
  106. while(s--){
  107. my_putchar_unlocked(f[s]+'0');
  108. }
  109. }
  110. int N;
  111. int W;
  112. int K;
  113. int A[200000];
  114. int main(){
  115. int i;
  116. wmem = memarr;
  117. int res = 0;
  118. rd(N);
  119. rd(W);
  120. rd(K);
  121. {
  122. int Lj4PdHRW;
  123. for(Lj4PdHRW=(0);Lj4PdHRW<(N);Lj4PdHRW++){
  124. rd(A[Lj4PdHRW]);
  125. }
  126. }
  127. rsortA_L(N,A);
  128. for(i=(0);i<(K);i++){
  129. A[i] = 1;
  130. }
  131. sortA_L(N,A);
  132. for(i=(0);i<(N);i++){
  133. if(A[i] <= W){
  134. W -= A[i];
  135. res++;
  136. }
  137. }
  138. wt_L(res);
  139. wt_L('\n');
  140. return 0;
  141. }
  142. // cLay version 20201123-1
  143.  
  144. // --- original code ---
  145. // int N, W, K, A[2d5];
  146. // {
  147. // int res = 0;
  148. // rd(N,W,K,A(N));
  149. // rsortA(N,A);
  150. // rep(i,K) A[i] = 1;
  151. // sortA(N,A);
  152. // rep(i,N) if(A[i] <= W) W -= A[i], res++;
  153. // wt(res);
  154. // }
  155.  
Time limit exceeded #stdin #stdout 5s 4376KB
stdin
Standard input is empty
stdout
Standard output is empty