Submission #320747

#TimeUsernameProblemLanguageResultExecution timeMemory
320747MiricaMateiCarnival Tickets (IOI20_tickets)C++14
27 / 100
662 ms51556 KiB
#include <bits/stdc++.h>
#include "tickets.h"

using namespace std;

const int MAXN = 1505;

struct Srt {
  int s;
  int i, j;
  bool operator <(const Srt& other) const {
    return s < other.s;
  }
};

int l[MAXN], r[MAXN];

long long find_maximum(int k, vector<vector<int> >v) {
  int n = v.size();
  int m = v[0].size();
  vector<vector<int> >s;
  vector<int>aux(m, -1);
  for (int i = 0; i < n; ++i) {
    s.push_back(aux);
    r[i] = m - 1;
  }
  vector<Srt>srt;
  long long ans = 0;
  for (int i = 0; i < n; ++i) {
    for (int j = r[i]; j >= r[i] - k + 1; --j) {
      ans += v[i][j];
      s[i][j] = r[i] - j;
    }
    for (int j = 0; j + m - k < m; ++j)
      srt.push_back({v[i][j] + v[i][j + m - k], i, j});
  }
  sort(srt.begin(), srt.end());
  for (int i = 0; i < n * k / 2; ++i) {
    ans -= srt[i].s;
    int val = s[srt[i].i][srt[i].j + m - k];
    s[srt[i].i][srt[i].j + m - k] = -1;
    s[srt[i].i][srt[i].j] = val;
  }
  allocate_tickets(s);
  return ans;
}

/*int main() {
  freopen("date.in", "r", stdin);
  freopen("date.out", "w", stdout);

  int n, m, k;
  cin >> n >> m >> k;
  vector<vector<int> >v;
  for (int i = 0; i < n; ++i) {
    vector<int>g(m);
    for (int j = 0; j < m; ++j)
      cin >> g[j];
    v.push_back(g);
  }

  cout << find_maximum(k, v);

  return 0;
}*/
#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...