Submission #518802

#TimeUsernameProblemLanguageResultExecution timeMemory
518802DanerZeinCarnival Tickets (IOI20_tickets)C++14
0 / 100
1 ms332 KiB
#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 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...