Submission #518804

#TimeUsernameProblemLanguageResultExecution timeMemory
518804DanerZeinCarnival Tickets (IOI20_tickets)C++14
11 / 100
707 ms1152 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<ll,ll> ii; typedef pair<ll,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,ll pm){ ll s=0,s1=0; for(int i=0;i<id.size();i++){ ll 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; ll 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; } } if(cma!=0 || cme!=0) continue; 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<long long int, long long int> >, ll)':
tickets.cpp:20:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long 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<long long int, std::pair<long long int, long long 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:106:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  106 |   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...