Advertisement
Guest User

Untitled

a guest
Jul 17th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. #include <cstdio>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <queue>
  5. using namespace std;
  6. int main() {
  7. int n, k;
  8. while(scanf("%d%d", &n, &k)==2)
  9. {
  10. vector<int> original(n);
  11. vector<pair<int,int> > p(n);
  12. for(int i=0;i<n;++i) {
  13. scanf("%d", &p[i].first);
  14. original[i] = p[i].first;
  15. p[i].second = i;
  16. }
  17. sort(p.begin(), p.end());
  18. priority_queue <int, vector<int>,std::greater<int> > caros;
  19. const int c = k<n?n-k*n/(k+1):0;
  20. int answer = 0, end = c, canjeados = k;
  21. for(int i=0;i<c;++i) {
  22. caros.push(p[p.size()-1-i].second);
  23. }
  24. // esto es un comentario
  25. while(!caros.empty()) {
  26. int aux = caros.top();
  27. caros.pop();
  28. if(aux<canjeados) {
  29. caros.push(p[p.size()-1-end].second);
  30. ++end;
  31. //printf("or: %d\n", original[aux]);
  32. answer += original[aux];
  33. }
  34. else {
  35. canjeados += k;
  36. }
  37. }
  38. for(int i=end;i<p.size();++i) {
  39. //printf("p: %d\n", p[p.size()-1-i].first);
  40. answer += p[p.size()-1-i].first;
  41. }
  42. printf("%d\n", answer);
  43. }
  44. return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement