Advertisement
a53

superhedgy

a53
May 5th, 2022
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. ifstream fin("superhedgy.in");
  5. ofstream fout("superhedgy.out");
  6. const int N = 1000002;
  7. int n, m, i;
  8. int64_t Lmax;
  9. long long Lu, Ld;
  10. struct cladire {
  11. int L, H, E;
  12. cladire() { L = H = E = 0; }
  13. };
  14.  
  15. cladire U[N], D[N];
  16. int main() {
  17. assert(fin >> n);
  18. assert(1 <= n && n <= 100000);
  19. for (i = 1; i <= n; i++) {
  20. assert(fin >> U[i].L >> U[i].H >> U[i].E);
  21. Lmax += U[i].L;
  22. Lu += U[i].L;
  23. assert(1 <= U[i].L && U[i].L <= 2000000000);
  24. assert(1 <= U[i].H && U[i].H <= 1000000000);
  25. assert(0 <= U[i].E && U[i].E <= 1000000000);
  26. }
  27. assert(fin >> m);
  28. assert(1 <= m && m <= 100000);
  29. for (i = 1; i <= m; i++) {
  30. assert(fin >> D[i].L >> D[i].H >> D[i].E);
  31. Lmax += D[i].L;
  32. Ld += D[i].L;
  33. assert(1 <= D[i].L && D[i].L <= 2000000000);
  34. assert(1 <= D[i].H && D[i].H <= 1000000000);
  35. assert(0 <= D[i].E && D[i].E <= 1000000000);
  36. }
  37. Lmax /= 2;
  38. assert(Lu == Ld);
  39. int i = 0, j = 0;
  40. int64_t solU = 0, solD = 0;
  41. while (i <= n && j <= m) {
  42. int lg = min(U[i].L, D[j].L);
  43. solU += lg;
  44. U[i].L -= lg;
  45. solD += lg;
  46. D[j].L -= lg;
  47. int64_t elevator = U[i].E + D[j].E;
  48. int64_t vertU = U[i].L ? 0 : abs(U[i].H - U[i + 1].H);
  49. int64_t vertD = D[j].L ? 0 : abs(D[j].H - D[j + 1].H);
  50. int64_t auxU = solU;
  51. int64_t auxD = solD;
  52. solU = min(auxU + vertU, auxD + elevator + vertU);
  53. solD = min(auxD + vertD, auxU + elevator + vertD);
  54. i = i + (U[i].L == 0);
  55. j = j + (D[j].L == 0);
  56. }
  57. fout << min(solU, solD);
  58. return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement