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 "robots.h"
#include<bits/stdc++.h>
using namespace std;
int XG[50001], YG[50001], WG[1000001], SG[1000001], AG, BG, TG;
bool suit(int t, bool type, int r) { /* true if weak, false if small    */
    if(type and WG[t] >= XG[r]) return false;
    if(!type and SG[t] >= YG[r]) return false;
    return true;
}
int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
    AG=A, BG=B, TG=T;
    for(int i=0; i<T; i++) {
        WG[i] = W[i];
        SG[i] = S[i];
    }
    for(int i=0; i<A; i++) XG[i] = X[i];
    for(int i=0; i<B; i++) YG[i] = Y[i];
    if(T==2 and (A+B)==2) {
        if(A==2) {
            if( (suit(0, true,0) and suit(1, true, 1) ) or ( suit(0,true,1) and suit(1,true,0) ) ) return 1;
            else if( (suit(0, true,0) and suit(1, true, 0) ) or ( suit(0,true,1) and suit(1,true,1) ) ) return 2;
            return -1;
        }
        if(B==2) {
            if( (suit(0, false,0) and suit(1, false, 1) ) or ( suit(0,false,1) and suit(1,false,0) ) ) return 1;
            else if( (suit(0, false,0) and suit(1, false, 0) ) or ( suit(0,false,1) and suit(1,false,1) ) ) return 2;
            return -1;
        }
        if( (suit(0, false,0) and suit(1, true, 0) ) or ( suit(0,true,0) and suit(1,false,0) ) ) return 1;
        else if( (suit(0, false,0) and suit(1, false, 0) ) or ( suit(0,true,0) and suit(1,true,0) ) ) return 2;
        return -1;
    }
    if(B==0) {
        vector<int> vec;
        for(int i=0; i<T; i++) vec.push_back(W[i]);
        sort(vec.begin(), vec.end());
        int t = 1;
        vector<int> robot;
        for(int i=0; i<A; i++) robot.push_back(X[i]);
        sort(robot.begin(), robot.end());
        int rob = A-1;
        int use[A+1];
        for(int i=0; i<A; i++) use[i] = 0;
        for(int i=T-1; i>-1 and rob>-1; i--) {
            if(vec[i]>=robot[rob]) return -1;
            if(use[rob]<t) { use[rob++]; continue;}
            if(!rob) {t++; use[rob]++; continue;}
            if(vec[i]<robot[rob-1]) {
                rob--;
                use[rob]++;
                continue;
            }
            use[rob]++;
            t++;
        }
        return t;
    }
    return 42;
}
| # | 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... |