Submission #38594

#TimeUsernameProblemLanguageResultExecution timeMemory
38594funcsrRobots (IOI13_robots)C++14
28 / 100
1076 ms29816 KiB
#include "robots.h"
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <set>
#include <cassert>
#include <algorithm>
using namespace std;
typedef pair<int, int> P;
#define rep(i, n) for (int i=0; i<(n); i++)
#define all(x) x.begin(), x.end()
#define uniq(x) x.erase(unique(all(x)), x.end())
#define pb push_back
#define _1 first
#define _2 second
#define INF 1145141919
#define MOD 1000000007

int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
  int max_x = -1, max_y = -1;
  rep(i, A) X[i]--;
  rep(i, B) Y[i]--;
  sort(X, X+A);
  sort(Y, Y+B);
  rep(i, A) max_x = max(max_x, X[i]);
  rep(i, B) max_y = max(max_y, Y[i]);
  rep(i, T) if (W[i] > max_x && S[i] > max_y) return -1;
  if (T == 2 && A+B == 2) {
    bool a[2][2] = {};
    rep(i, T) {
      int o = 0;
      rep(j, A) {
        if (W[i] <= X[j]) a[i][o] = true;
        o++;
      }
      rep(j, B) {
        if (S[i] <= Y[j]) a[i][o] = true;
        o++;
      }
    }
    if (a[0][0] && a[1][1]) return 1;
    if (a[0][1] && a[1][0]) return 1;
    return 2;
  }
  else if (B == 0) {
    int t = 0;
    multiset<int> vs;
    rep(i, T) vs.insert(W[i]);
    int l = 0;
    while (!vs.empty()) {
      t++;
      for (int i=l; i<A; i++) {
        auto it = vs.upper_bound(X[i]);
        if (it == vs.begin()) {
          l = i+1;
          continue;
        }
        vs.erase(--it);
      }
    }
    return t;
  }
  abort();
}
#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...