YauhenMardan

Untitled

May 30th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. #include <fstream>
  2. #include <set>
  3. #include <vector>
  4.  
  5. typedef std::pair<int, long long> _pair;
  6.  
  7. int main(int argc, const char * argv[]) {
  8. std::ifstream fin("input.txt");
  9. std::ofstream fout("output.txt");
  10. int n=0,m;
  11. fin>>m;
  12. //works
  13. auto compG = []( _pair a, _pair b ) {
  14. if(a.second==b.second){
  15. return a.first > b.first;
  16. } else{
  17. return a.second > b.second;
  18. }
  19. };
  20. std::set<_pair, decltype(compG) > works(compG);
  21. long long temp;
  22. while (!fin.eof()) {
  23. n++;
  24. fin>>temp;
  25. works.insert(std::make_pair(n, temp));
  26. }
  27. fin.close();
  28. std::vector<int> works_workers(n,0);
  29. //workers
  30. auto compL = []( _pair a, _pair b ) {
  31. if(a.second==b.second){
  32. return a.first > b.first;
  33. } else{
  34. return a.second < b.second;
  35. }
  36. };
  37. std::set<_pair,decltype(compL) > workers(compL);
  38. for(int i=0;i<m;i++){
  39. workers.insert(std::make_pair(i+1, 0));
  40. }
  41. //algo
  42. _pair t_work,t_worker;
  43. while (!works.empty()) {
  44. t_work=*works.begin();
  45. works.erase(works.begin());
  46. t_worker=*workers.begin();
  47. workers.erase(workers.begin());
  48.  
  49. works_workers[t_work.first-1]=t_worker.first;
  50. workers.insert(std::make_pair(t_worker.first, t_worker.second+t_work.second));
  51. }
  52. //out
  53. fout<<(*(--workers.end())).second<<"\n";
  54. for(int i=0;i<n;i++){
  55. fout<<works_workers[i]<<" ";
  56. }
  57. fout<<"\n";
  58. fout.close();
  59. return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment