Advertisement
pb_jiang

abc274F WA

Oct 26th, 2022
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <assert.h>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define dbg(...) logger(#__VA_ARGS__, __VA_ARGS__)
  5. template <typename... Args> void logger(string vars, Args &&... values)
  6. {
  7.     cerr << vars << " = ";
  8.     string delim = "";
  9.     (..., (cerr << delim << values, delim = ", "));
  10.     cerr << endl;
  11. }
  12.  
  13. template <class T> using mpq = priority_queue<T, vector<T>, greater<T>>;
  14. using ll = long long;
  15. using pii = pair<int, int>;
  16.  
  17. int n, a;
  18. int w[1 << 11], x[1 << 11], v[1 << 11];
  19.  
  20. struct frac {
  21.     int x, y;
  22.     bool operator<(const frac &f) const
  23.     {
  24.         // this->x/this->y < f.x/f.y for y > 0
  25.         assert(y > 0);
  26.         assert(f.y > 0);
  27.         return this->x * f.y < this->y * f.x;
  28.     }
  29. };
  30.  
  31. using pfi = pair<frac, int>;
  32.  
  33. int main(int argc, char **argv)
  34. {
  35.     cin >> n >> a;
  36.     for (int i = 1; i <= n; ++i)
  37.         cin >> w[i] >> x[i] >> v[i];
  38.     int ans = 0;
  39.     frac zero{0, 1};
  40.     for (int i = 1; i <= n; ++i) {
  41.         vector<pfi> vec;
  42.         for (int j = 1; j <= n; ++j) {
  43.             int dv = v[j] - v[i];
  44.             int dx = x[j] - x[i];
  45.             if (dv == 0) {
  46.                 if (dx >= 0 && dx <= a)
  47.                     vec.push_back({zero, w[j]});
  48.             } else if (dv > 0) {
  49.                 vec.push_back({{-dx, dv}, w[j]});
  50.                 vec.push_back({{a - dx, dv}, -w[j]});
  51.             } else {
  52.                 vec.push_back({{dx - a, -dv}, w[j]});
  53.                 vec.push_back({{dx, -dv}, -w[j]});
  54.             }
  55.         }
  56.         sort(vec.begin(), vec.end());
  57.         int acc = 0;
  58.         for (const auto &[f, w] : vec) {
  59.             acc += w;
  60.             fprintf(stderr, "f:%d,%d w:%d\n", f.x, f.y, w);
  61.             if (!(f < zero))
  62.                 ans = max(ans, acc);
  63.         }
  64.         fprintf(stderr, "\n\n");
  65.     }
  66.     printf("%d\n", ans);
  67.     return 0;
  68. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement