Submission #571225

#TimeUsernameProblemLanguageResultExecution timeMemory
571225DeepessonRobots (IOI13_robots)C++17
0 / 100
1 ms212 KiB
#include <bits/stdc++.h> #include "robots.h" typedef std::pair<int,int> pii; typedef std::pair<int,int*> pipo; int putaway(int A,int B,int T,int _X[],int _Y[],int _W[],int _S[]){ std::vector<int> X,Y,W,S; for(int i=0;i!=A;++i){ X.push_back(_X[i]); } for(int i=0;i!=B;++i){ Y.push_back(_Y[i]); } for(int i=0;i!=T;++i){ W.push_back(_W[i]); S.push_back(_S[i]); } /* { std::vector<pipo> vec; for(auto&x:X){ vec.push_back({x,&x}); } for(auto&x:Y){ vec.push_back({x,&x}); } for(auto&x:W){ vec.push_back({x,&x}); } for(auto&x:S){ vec.push_back({x,&x}); } std::sort(vec.begin(),vec.end()); int cur=2,last=-(1e9); for(auto&x:vec){ if(x.first!=last){ ++cur; last=x.first; } *x.second=cur; } }*/ std::sort(X.begin(),X.end()); std::sort(Y.begin(),Y.end()); int pesos[T]={}; { std::vector<pii> vec; ///T itens for(int i=0;i!=T;++i){ vec.push_back({W[i],i}); } std::sort(vec.begin(),vec.end()); ///A robos int soma[T]={}; int cur=0; for(int i=0;i!=A;++i){ while(cur!=T&&(vec[cur].first<X[i])){ ++cur; } if(cur){ soma[cur-1]++; } } int s=0; for(int i=T-1;i!=-1;--i){ s+=soma[i]; pesos[vec[i].second]+=s; } } { std::vector<pii> vec; ///T itens for(int i=0;i!=T;++i){ vec.push_back({S[i],i}); } std::sort(vec.begin(),vec.end()); ///A robos int soma[T]={}; int cur=0; for(int i=0;i!=B;++i){ while(cur!=T&&(vec[cur].first<Y[i])){ ++cur; } if(cur){ soma[cur-1]++; } } int s=0; for(int i=T-1;i!=-1;--i){ s+=soma[i]; pesos[vec[i].second]+=s; } } for(auto&x:pesos)if(!x)return -1; int l=0,r=T; while(l<r){ int m = (l+r)/2; int retirou=0; bool pegou[T]={}; { for(int i=0;i!=A;++i){ int pos=-1,valor = 1e9; for(int j=0;j!=T;++j){ if(pegou[j])continue; if(W[j]<X[i]){ if(pesos[j]<valor){ valor=pesos[j]; pos=j; } } } if(pos!=-1){ pegou[pos]=true; ++retirou; } } for(int i=0;i!=B;++i){ int pos=-1,valor=1e9; for(int j=0;j!=T;++j){ if(pegou[j])continue; if(S[j]<Y[i]){ if(pesos[j]<valor){ valor=pesos[j]; pos=j; } } } if(pos!=-1){ pegou[pos]=true; ++retirou; } } if(retirou==T){ break; } } if(retirou==T){ r=m; }else l=m+1; } return l; }
#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...