Submission #1360468

#TimeUsernameProblemLanguageResultExecution timeMemory
1360468huseyncafarliAsteroid Mining (CCO25_day1problem1)C++20
7 / 25
344 ms18264 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int ll

const int MAXN = 1e6 + 5;
const int inf = (int)2e9 + 5;
const int infll = (int)4e18 + 5;
const int mod = (int)1e9 + 7;



void solve(){
  int n, M;
  cin >> n >> M;
  vector<int> v(n+1), m(n + 1);
  set<int> s;
  for(int i = 1; i <= n; i++) {
    cin >> v[i] >> m[i];
    s.insert(m[i]);
  }
  int m1, m2;
  m1 = *s.begin();
  if((int)s.size() > 1) m2 = *s.rbegin();
  else m2 = m1;


  vector<vector<int>> g(2), pref(2);
  for(int i = 1; i <= n; i++) {
    if(m[i] == m1) g[0].push_back(v[i]);
    else if(m[i] == m2) g[1].push_back(v[i]);
  }
  sort(g[0].rbegin(), g[0].rend());
  if(s.size() > 1) sort(g[1].rbegin(), g[1].rend());

  for(int i = 0; i < s.size(); i++) {
    pref[i].push_back(0);
    for(int j = 0; j < g[i].size(); j++) {
      pref[i].push_back(pref[i].back() + g[i][j]);
    }
  }
  int c1 = M / m1;
  int res = pref[0][min((int)g[0].size(), c1)];
  if(s.size() > 1) {
    for(int i = 0 ; i <= c1; i++) {
      int c2 = (M - 1ll*m1*i) / m2;
      res = max(res, pref[0][(min(i,(int)g[0].size()))] + pref[1][min((int)g[1].size(), c2)]);
    }
  }
  cout << res << endl;
}

signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t = 1;
  //cin >> t;
  while(t--)
    solve();
  return 0;
}

#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...