Submission #1059230

#TimeUsernameProblemLanguageResultExecution timeMemory
1059230vjudge1Robots (IOI13_robots)C++17
28 / 100
116 ms19784 KiB
#include "robots.h"
#include<bits/stdc++.h>
#define ll long long

using namespace std;

vector<pair<int,int>> Tw,Ts;
int a, t;
vector<int> x;

bool bcheck(int n){
    int pos=0,cnt=n,toys_cnt=0;
    for(int i=0; i < t; i++){
        if(Tw[i].first < x[pos]){
            cnt--;
            toys_cnt++;
        }
        if(cnt == 0){
            cnt = n;
            pos++;
        }
        if(pos >= a)break;
    }

    return toys_cnt == t;
}

int binary(int l, int r){
    int n;

    while(l <= r){
        n = (l+r)/2;

        if(bcheck(n)){
            r = n-1;
        }else{
            l = n+1;
        }
    }

    return l;
}

int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
    int ans=-1;
    
    if(T == 2 && A+B == 2){
        for(int i=0; i < T; i++){
            Tw.push_back({W[i],S[i]});
            Ts.push_back({S[i],W[i]});
        }
        sort(Tw.rbegin(),Tw.rend());
        sort(Ts.rbegin(),Ts.rend());
        
        int r1=0,r2=0;
        if(A == 2){
            for(int i=0; i < T; i++){
                if(Tw[i].first < X[0]){
                    r1++;
                }
                if(Tw[i].first < X[1]){
                    r2++;
                }
            }
        }else if(B == 2){
            for(int i=0; i < T; i++){
                if(Ts[i].first < Y[0]){
                    r1++;
                }
                if(Ts[i].first < Y[1]){
                    r2++;
                }
            }
        }else{
            for(int i=0; i < T; i++){
                if(Tw[i].first < X[0]){
                    r1++;
                }
            }
            for(int i=0; i < T; i++){
                if(Ts[i].first < Y[0]){
                    r2++;
                }
            }
        }

        ans=-1;
        if((r1 == 2 && r2 >= 1) || (r2 == 2 && r1 >= 1)){
            ans = 1;
        }else if((r1 == 2 && r2 == 0) || (r2 == 2 && r1 == 0)){
            ans = 2;
        }else if(r1 == 1 && r2 == 1){
            int a,b;
            for(int i=0; i < T; i++){
                if(Tw[i].first < X[0]){
                    a = i;
                }
                if(Tw[i].second < Y[0]){
                    b = i;
                }
            }
            if(a != b){
                ans = 1;
            }
        }
        return ans;
    }

    a = A; t = T;
    for(int i=0; i < A; i++){
        x.push_back(X[i]);
    }
    sort(x.rbegin(),x.rend());
    for(int i=0; i < T; i++){
        Tw.push_back({W[i],S[i]});
    }
    sort(Tw.rbegin(),Tw.rend());
    
    ans=binary(1,T);

    if(ans > T)ans = -1;

    return ans;
}
#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...