제출 #540646

#제출 시각아이디문제언어결과실행 시간메모리
540646MilosMilutinovicCarnival Tickets (IOI20_tickets)C++14
27 / 100
468 ms51540 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; /* at every round we choose n / 2 mins and n / 2 maxs value of round is sum_of_maxs - sum_of_mins mx[i] + mn[i] > mx[j] + mn[j] ^ wrong just image taking k mins and then find diffs next max - last min sort everything and take greedy works? */ long long find_maximum(int k, vector<vector<int>> x) { int n = x.size(), m = x[0].size(); vector<vector<int>> ans(n, vector<int>(m, -1)); long long sum = 0; vector<tuple<long long, int, int, int>> ops; for (int i = 0; i < n; i++) { for (int j = 0; j < k; j++) { sum -= x[i][j]; ans[i][j] = j; } for (int j = k - 1; j >= 0; j--) { ops.emplace_back(x[i][j] + x[i][m - (k - j)], i, j, m - (k - j)); } } int take = (n / 2) * k; sort(ops.rbegin(), ops.rend()); for (int id = 0; id < take; id++) { sum += get<0>(ops[id]); int i = get<1>(ops[id]); int jx = get<2>(ops[id]); int jy = get<3>(ops[id]); swap(ans[i][jx], ans[i][jy]); } vector<tuple<int, int, int>> vec; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (ans[i][j] != -1) { vec.emplace_back(x[i][j], i, j); } } } sort(vec.begin(), vec.end()); int nxt = 0; for (int id = 0; id < vec.size(); id++) { int i = get<1>(vec[id]); int j = get<2>(vec[id]); ans[i][j] = nxt; nxt = (nxt + 1) % k; } sum = 0; vector<vector<int>> vals(k); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (ans[i][j] == -1) { continue; } vals[ans[i][j]].push_back(x[i][j]); } } for (int i = 0; i < k; i++) { sort(vals[i].begin(), vals[i].end()); for (int j = 0; j < n; j++) { if (j < n / 2) { sum -= vals[i][j]; } else { sum += vals[i][j]; } } } allocate_tickets(ans); return sum; }

컴파일 시 표준 에러 (stderr) 메시지

tickets.cpp: In function 'long long int find_maximum(int, std::vector<std::vector<int> >)':
tickets.cpp:50:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::tuple<int, int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |   for (int id = 0; id < vec.size(); id++) {
      |                    ~~~^~~~~~~~~~~~
#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...