This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "tickets.h"
#include <bits/stdc++.h>
#include <cassert>
#include <cstdio>
#include <vector>
#include <string>
#ifdef _WIN32
# define I64 "%I64d"
#else
# define I64 "%lld"
#endif
typedef long long ll;
using namespace std;
//static int n;
//static int m;
//static int k;
//static std::vector<std::vector<int> > d;
//static std::vector<std::vector<int> > x;
//static int called = 0;
//
//long long find_maximum(int , std::vector<std::vector<int> > ) ;
//
//
//static void _assert (bool cond, const char* error) {
// if (!cond) {
// printf("%s\n", error);
// exit(0);
// }
//}
//
//void allocate_tickets (std::vector<std::vector<int> > _d) {
// _assert(!called, "allocate_tickets called more than once");
// d = _d;
// _assert((int) d.size() == n, "allocate_tickets called with parameter of wrong size");
// for (int i = 0; i < n; i++)
// _assert((int) d[i].size() == m, "allocate_tickets called with parameter of wrong size");
// called = 1;
//}
//
//int main () {
// assert(scanf("%d %d %d", &n, &m, &k) == 3);
// x.resize(n);
// for (int i = 0; i < n; i++) {
// x[i].resize(m);
// for (int j=0; j < m; j++)
// assert(scanf("%d", &x[i][j]) == 1);
// }
// fclose(stdin);
//
// long long answer = find_maximum(k, x);
// _assert(called, "failure to call allocate_tickets");
// printf(I64 "\n", answer);
// for (int i = 0; i < n; i++) {
// for (int j = 0; j < m; j++) {
// if (j)
// printf(" ");
// printf("%d", d[i][j]);
// }
// printf("\n");
// }
//}
long long find_maximum(int k, std::vector<std::vector<int> > x) {
int n = x.size();
int m = x[0].size();
std::vector<std::vector<int> > ans;
ans.resize(n);
for (int i = 0; i < n; i++) ans[i].resize(m);
for (int i = 0; i < n; i++)
{
if (i < n / 2)
{
for (int j = 0; j < m; j++)
if (j < k) ans[i][j] = j;
else ans[i][j] = -1;
}
else
{
for (int j = m - 1; j >= 0; j--)
if (j >= (m - k)) ans[i][j] = m - j - 1;
else ans[i][j] = -1;
}
}
int a[k][n];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (ans[i][j] != -1) a[ans[i][j]][i] = x[i][j];
ll sum = 0;
for (int i = 0; i < k; i++)
{
sort(a[i], a[i] + n);
for (int j = 0; j < n; j++) sum += abs(a[i][j] - a[i][n / 2]);
}
allocate_tickets(ans);
return sum;
}
/*
2 3 2
0 2 5
1 1 3
4 2 1
5 9
1 4
3 6
2 7
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |