Submission #1198682

#TimeUsernameProblemLanguageResultExecution timeMemory
1198682LucaLucaMCarnival Tickets (IOI20_tickets)C++20
16 / 100
312 ms51380 KiB
#include "tickets.h"
#include <vector>
#include <iostream>
#include <algorithm>

using ll = long long;

ll find_maximum(int k, std::vector<std::vector<int>> a) {
  int n = (int) a.size();
  int m = (int) a[0].size();

  if (k == 1) {
    // pt fiecare ori aleg prima valoare, ori aleg ultima valoare
    // initial sa zicem ca mereu aleg prima valoare si o pun cu -
    // intr un pas pot sa schimb din prima in ultima si vad profitu pe care il primesc
    // iau cele mai mari n / 2 profit uri

    std::vector<int> rows(n);
    for (int i = 0; i < n; i++) {
      rows[i] = i;
    }
    std::sort(rows.begin(), rows.end(), [&](int x, int y) {
      return a[x].back() + a[x][0] > a[y].back() + a[y][0];
    });
    
    std::vector<std::vector<int>> answer(n, std::vector<int>(m, -1));

    ll sum = 0;
    for (int i = 0; i < n; i++) {
      answer[i][0] = 0;
      sum += -a[i][0];
    }
    for (int i = 0; i < n / 2; i++) {
      answer[rows[i]][m - 1] = 0;
      answer[rows[i]][0] = -1;
      sum += a[rows[i]].back() + a[rows[i]][0];
    }

    allocate_tickets(answer);
    
    return sum;
  }
  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...