Submission #104522

#TimeUsernameProblemLanguageResultExecution timeMemory
104522hugo_pmRobots (IOI13_robots)C++17
100 / 100
2169 ms13988 KiB
#include "robots.h"
#include <bits/stdc++.h>
using namespace std;

#define form2(i, a, b) for (int i = (a); i < (b); ++i)
#define ford2(i, a, b) for (int i = (a-1); i >= b; --i)
#define form(i, n) form2(i, 0, n)
#define ford(i, n) ford2(i, n, 0)

#define chmax(x, v) x = max(x, (v))
#define chmin(x, v) x = min(x, (v))
#define fi first
#define se second

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;

const int INF = (int)(1e9);

const int maxToys = 1000*1000 + 5;
const int maxRobots = 50*1000 + 5;

int nbToys, nbWeak, nbSmall;
vector<pii> toys;
vector<int> weak;
vector<int> small;


bool can(int temps)
{
	priority_queue<int> ts;
	int indToy = 0;
	form(indWeak, nbWeak) {
		int lim = weak[indWeak];
		while (indToy < nbToys && toys[indToy].fi < lim) {
			ts.push(toys[indToy].se);
			++indToy;
		}
		int reste = temps;
		while (ts.empty() == false && reste > 0) {
			ts.pop();
			--reste;
		}
	}

	while (indToy < nbToys) {
		ts.push(toys[indToy].se);
		++indToy;
	}

	ford(indSmall, nbSmall) {
		int lim = small[indSmall];
		int reste = temps;
		while (ts.empty() == false && reste > 0 && ts.top() < lim) {
			ts.pop();
			--reste;
		}
	}

	return ts.empty();
}


int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
	nbToys = T; nbWeak = A; nbSmall = B;

	toys.resize(nbToys);
	form(i, nbToys) toys[i] = pii {W[i], S[i]};
	sort(toys.begin(), toys.end());

	weak.resize(nbWeak);
	form(i, nbWeak) weak[i] = X[i];
	sort(weak.begin(), weak.end());

	small.resize(nbSmall);
	form(i, nbSmall) small[i] = Y[i];
	sort(small.begin(), small.end());

	int bgauche = 1, bdroite = maxToys;
	if (! can(bdroite)) return -1;
	while (bgauche < bdroite) {
		int bmid = (bgauche + bdroite) / 2;
		if (can(bmid)) bdroite = bmid;
		else bgauche = bmid + 1;
	}

	return bgauche;
}

#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...