Submission #526067

#TimeUsernameProblemLanguageResultExecution timeMemory
526067DeepessonRobots (IOI13_robots)C++17
0 / 100
1 ms304 KiB
#include <bits/stdc++.h>
#include "robots.h"
typedef std::pair<int,int> pii;
int putaway(int A,int B,int T,int X[],int Y[],int W[],int S[]){
    std::sort(X,&X[A]);
    std::sort(Y,&Y[B]);
    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(i!=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;
        }
    }

    for(int i=0;i!=B;++i){
        for(int j=0;j!=T;++j){
            if(S[j]<Y[i]){
                pesos[j]++;
            }
        }
    }
    for(auto&x:pesos)if(!x)return -1;
    int count=0,retirou=0;
    bool pegou[T]={};
    for(;;){
        ++count;
        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;
        }
    }
    return count;
}
#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...