fork download
  1. #include <bits/stdc++.h>
  2. #define f(i,a,b) for (int i =a;i<b;i++)
  3. #define fr(i,a,b) for (int i =a;i<=b;i++)
  4.  
  5. using ll = long long;
  6. using namespace std;
  7.  
  8. const int maxn = 1e5;
  9.  
  10. int main()
  11. {
  12. // #ifndef oj
  13. // freopen("MM.inp","r",stdin);
  14. // freopen("MM.out","w",stdout);
  15. // #endif
  16. // ios::sync_with_stdio(false);
  17. // cin.tie(nullptr);
  18.  
  19. int n,l,d; cin >> n >> l >> d;
  20. int a[maxn], b[maxn];
  21. f(i,0,n) cin >>a[i]; f(i,0,n) cin >>b[i];
  22. vector<pair<int,int>> trees;
  23. f(i,0,n) trees.push_back(make_pair(a[i],b[i]));
  24. sort(trees.begin(),trees.end());
  25. sort(a,a+n);
  26. l-=2*d;
  27. vector<int> v;
  28. f(i,0,n) {
  29. int tl = d*2;int res= trees[i].second;
  30. f (j, i+1, n) {
  31. if (tl+(a[j]-a[j-1])*d*2<=l) {tl += (a[j]-a[j-1])*d*2;res+=trees[j].second;}
  32. if (tl+(a[j]-a[j-1])*d*2>l) {
  33. break;
  34. }
  35. }
  36. v.push_back(res);
  37. }
  38. cout << *max_element(v.begin(),v.end());
  39.  
  40. }
  41.  
Success #stdin #stdout 0.01s 5504KB
stdin
5 10 1
1 7 3 4 6
5 1 3 5 6
stdout
14