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 <vector>
#include <bits/stdc++.h>
// existen dos escenarios en el que la media sea maxima o en que sea minima
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> ii;
typedef pair<int,ii> iii;
const int MAX_N=1510;
bool vis[MAX_N];
vector<vi> ti;
vector<vi> p1,p0;
ll med;
vector<vi> ma;
int n,m;
ll calcular(vector<ii> id,int pm){
ll s=0,s1=0;
for(int i=0;i<id.size();i++){
int val;
if(id[i].second) val=ma[id[i].first][0];
else val=ma[id[i].first][m-1];
s+=abs(val-med);
s1+=abs(val-pm);
}
s+=abs(pm-med);
s1+=abs(pm-med);
return min(s,s1);
}
long long find_maximum(int k, std::vector<std::vector<int>> x) {
n=x.size(); m=x[0].size();
ma=x;
ti.resize(n);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++) ti[i].push_back(-1);
}
ll ans=0;
vector<ii> all;
for(int i=0;i<n;i++){
all.push_back(ii(1,i));
all.push_back(ii(0,i));
}
vector<ii> res;
for(int i=0;i<2*n;i++){
ll rp=0;
int id=all[i].second;
if(all[i].first) med=x[id][0];
else med=x[id][m-1];
memset(vis,0,sizeof vis);
vis[id]=1;
vector<iii> a;
for(int j=0;j<n;j++){
if(!vis[j]){
a.push_back(iii(-abs(x[j][0]-med),ii(j,1)));
a.push_back(iii(-abs(x[j][m-1])-med,ii(j,0)));
}
}
sort(a.begin(),a.end());
int cme,cma;
cme=cma=(n-2)/2;
vector<ii> pid;
pid.push_back(ii(id,all[i].first));
for(int j=0;j<a.size();j++){
ll s=a[j].first;
int b=a[j].second.first;
bool sw=a[j].second.second;
int val;
if(sw) val=x[b][0];
else val=x[b][m-1];
if(vis[b]) continue;
if(val<=med && cme!=0){
cme--;
pid.push_back(ii(b,sw));
vis[b]=1;
continue;
}
if(val>=med && cma!=0){
cma--;
pid.push_back(ii(b,sw));
vis[b]=1;
}
}
int nt=0;
for(int j=0;j<n;j++){
if(!vis[j]) nt=j;
}
ll o1=calcular(pid,x[nt][0]);
ll o2=calcular(pid,x[nt][m-1]);
rp=max(o1,o2);
if(o1>o2){
pid.push_back(ii(nt,1));
}
else{
pid.push_back(ii(nt,0));
}
if(ans<rp){
res=pid;
ans=rp;
}
}
for(int i=0;i<res.size();i++){
if(res[i].second) ti[res[i].first][0]=0;
else ti[res[i].first][m-1]=0;
}
allocate_tickets(ti);
return ans;
}
Compilation message (stderr)
tickets.cpp: In function 'll calcular(std::vector<std::pair<int, int> >, int)':
tickets.cpp:20:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
20 | for(int i=0;i<id.size();i++){
| ~^~~~~~~~~~
tickets.cpp: In function 'long long int find_maximum(int, std::vector<std::vector<int> >)':
tickets.cpp:66:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
66 | for(int j=0;j<a.size();j++){
| ~^~~~~~~~~
tickets.cpp:67:10: warning: unused variable 's' [-Wunused-variable]
67 | ll s=a[j].first;
| ^
tickets.cpp:104:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
104 | for(int i=0;i<res.size();i++){
| ~^~~~~~~~~~~
# | 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... |