PageRenderTime 98ms CodeModel.GetById 31ms RepoModel.GetById 18ms app.codeStats 0ms

/161B-3.cpp

https://bitbucket.org/alculquicondor/codeforces
C++ | 75 lines | 70 code | 5 blank | 0 comment | 9 complexity | 8db58d471f493da320b50ea3db9edfee MD5 | raw file
  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<vector>
  4. #include<iostream>
  5. using namespace std;
  6. struct obj
  7. {
  8. long long pr;
  9. int id;
  10. bool t;
  11. obj(long long pr,bool t,int id)
  12. {
  13. this->pr=pr;
  14. this->t=t;
  15. this->id=id;
  16. }
  17. obj(){}
  18. };
  19. bool order(obj a,obj b)
  20. {
  21. if(a.t==b.t)
  22. return a.pr>b.pr;
  23. return a.t<b.t;
  24. }
  25. long long findmin(vector<obj> &A)
  26. {
  27. long long ans=1LL<<62;
  28. for(auto x:A)
  29. ans=min(ans,x.pr);
  30. return ans;
  31. }
  32. int main()
  33. {
  34. int n,k;
  35. scanf("%d %d",&n,&k);
  36. obj A[1001];
  37. int pr,t;
  38. for(int i=0;i<n;i++)
  39. {
  40. scanf("%d %d",&pr,&t);
  41. A[i]=obj(2LL*pr,t-1,i+1);
  42. }
  43. sort(A,A+n,order);
  44. vector<obj> C[1001];
  45. for(int i=0;i<k;i++)
  46. C[i].push_back(A[i]);
  47. int i=k;
  48. while(i<n)
  49. {
  50. C[k-1].push_back(A[i]);
  51. i++;
  52. }
  53. long long ans=0;
  54. for(int i=0;i<k;i++)
  55. {
  56. long long mini=findmin(C[i]);
  57. for(auto x:C[i])
  58. ans=ans+x.pr;
  59. if(C[i][0].t==0)
  60. ans-=mini/2;
  61. }
  62. cout<<(ans/2)<<"."<<(ans%2?5:0)<<"\n";
  63. for(int i=0;i<k;i++)
  64. {
  65. printf("%d",C[i].size());
  66. for(auto x:C[i])
  67. printf(" %d",x.id);
  68. puts("");
  69. }
  70. }