fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long;
  4. #define F first
  5. #define S second
  6. #define Bananami signed
  7. #define eb emplace_back
  8. #define MASK(i) (1 << (i))
  9. #define BIT(x, i) (((x) >> (i)) & 1)
  10. #define f(i, l, r) for(int i = l; i <= r; ++i)
  11. #define e(i, l, r) for(int i = l; i >= r; --i)
  12. const int mod = 1e9 + 7;
  13. const int dom = 998244353;
  14. const int ars = 2e3 + 5;
  15. const int ii = 1e9;
  16. const ll il = 1e18;
  17.  
  18.  
  19.  
  20. ll n, k, x, a[ars], b[ars], c[ars], d[ars];
  21. unordered_set<ll> s[ars];
  22.  
  23. Bananami main(){
  24. ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  25.  
  26. cin >> n >> k >> x;
  27. f(i, 1, n) cin >> a[i] >> b[i] >> c[i] >> d[i];
  28.  
  29. s[0].insert(x);
  30. f(i, 1, n){
  31. for(ll p : s[i - 1]){
  32. if(p < x - k){
  33. // cout << "type1\n";
  34. if(c[i]) s[i].insert(p + a[i]);
  35. else s[i].insert(p - b[i]);
  36. }else if(p > x + k){
  37. // cout << "type2\n";
  38. if(d[i]) s[i].insert(p + a[i]);
  39. else s[i].insert(p - b[i]);
  40. }else{
  41. // cout << "type3\n";
  42. if(c[i] == 1 or d[i] == 1) s[i].insert(p + a[i]);
  43. if(c[i] == 0 or d[i] == 0) s[i].insert(p - b[i]);
  44. }
  45. }
  46. }
  47.  
  48. ll res = -il;
  49. for(ll x : s[n]) res = max(res, x);
  50.  
  51. cout << res;
  52.  
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Standard output is empty