Submission #1252345

#TimeUsernameProblemLanguageResultExecution timeMemory
1252345flashmtFestival (IOI25_festival)C++20
51 / 100
77 ms8248 KiB
#include "festival.h"
#include <bits/stdc++.h>
#ifdef LOCAL
#include "Debug.h"
#else
#define debug(...) 42
#endif
using namespace std;
const long long oo = 1LL << 60;

vector<int> max_coupons(int A, vector<int> P, vector<int> T) {
  vector<pair<int, int>> a[5];
  int n = size(P);
  for (int i = 0; i < n; i++)
    a[T[i]].push_back({P[i], i});

  for (int i = 1; i <= 4; i++)
    sort(begin(a[i]), end(a[i]));

  vector<long long> sum1 = {0};
  for (auto [x, _] : a[1])
    sum1.push_back(sum1.back() + x);

  int maxT = *max_element(begin(T), end(T));

  if (maxT <= 2)
  {
    int best = -1;
    vector<int> buy;
    long long has = A;
    for (int i = 0; i <= int(size(a[2])); i++)
    {
      int u = upper_bound(begin(sum1), end(sum1), has) - begin(sum1) - 1;
      if (u + i > best)
      {
        best = u + i;
        buy = {u, i};
      }

      if (i == int(size(a[2])))
        break;

      auto [x, _] = a[2][i];
      if (has < x)
        break;

      has = min((has - x) * 2, oo);
    }

    vector<int> ans;
    for (int i = size(buy) - 1; i >= 0; i--)
      for (int j = 0; j < buy[i]; j++)
        ans.push_back(a[i + 1][j].second);
    return ans;
  }

  // sub 5
  vector<int> ids(n);
  iota(begin(ids), end(ids), 0);
  sort(begin(ids), end(ids), [&](int u, int v) {
    long long costUV = 1LL * P[u] * T[u] * T[v] + 1LL * P[v] * T[v];
    long long costVU = 1LL * P[v] * T[v] * T[u] + 1LL * P[u] * T[u];
    return costUV < costVU;
  });

  return ids;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...