Submission #411536

#TimeUsernameProblemLanguageResultExecution timeMemory
411536MlxaRobots (IOI13_robots)C++14
76 / 100
323 ms19636 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define all(x) x.begin(), x.end()
#define mp make_pair
#define mt make_tuple
#define x first
#define y second
#include "robots.h"

const int N = 5e4 + 10;

bool used[N];

void iter(int a, int b, int t, int x[], int y[], int w[], int s[]) {
	// cout << "iter " << a << " " << b << " " << t << endl;
	for (int i = 0; i < a; ++i) {
		int mx = -1;
		for (int j = 0; j < t; ++j) {
			if (used[j] || w[j] >= x[i]) {
				continue;
			}
			if (mx == -1 || s[mx] < s[j]) {
				mx = j;
			}
		}
		if (mx != -1) {
			// cout << "take w " << w[i] << ": " << x[mx] << " " << y[mx] << endl;
			used[mx] = true;
		}
	}
	for (int i = 0; i < b; ++i) {
		int mx = -1;
		for (int j = 0; j < t; ++j) {
			if (used[j] || s[j] >= y[i]) {
				continue;
			}
			if (mx == -1 || w[mx] < w[j]) {
				mx = j;
			}
		}
		if (mx != -1) {
			// cout << "take s " << s[i] << ": " << x[mx] << " " << y[mx] <<  " @" << mx << endl;
			used[mx] = true;
		}
	}
}

int putaway(int a, int b, int t, int x[], int y[], int w[], int s[]) {
	sort(x, x + a);
	sort(y, y + b);
	int ti = 0;
	while (1) {
		int was = (int)count(used, used + t, true);
		if (was == t) {
			break;
		}
		++ti;
		iter(a, b, t, x, y, w, s);
		int now = (int)count(used, used + t, true);
		if (was == now) {
			return -1;
		}
	}
	return ti;
}

#ifdef LC
#include "grader.c"
#endif
#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...