이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "robots.h"
#define all(v) v.begin(), v.end()
#define chmax(x, v) x = max(x, v)
#define chmin(x, v) x = min(x, v)
#define sz(v) (int)v.size()
#define pb push_back
//#define int long long
using namespace std;
struct Chose
{
bool estRobot;
bool triTaille;
int taille, poids;
bool operator < (const Chose &autre) const
{
if (triTaille && taille != autre.taille)
return taille < autre.taille;
else if (!triTaille && poids != autre.poids)
return poids < autre.poids;
else if (estRobot != autre.estRobot)
return estRobot;
return false;
}
void dbg(){
return;
cout << estRobot << " " << triTaille << " " << taille << " " << poids << endl;
}
};
int nFragiles, nPetits;
int nJouets;
vector<Chose> jouets, robotsFragiles, robotsPetits;
vector<Chose> objets;
bool fonctionne (int limite){
priority_queue<Chose> jouetsPasRanges;
for (Chose& objet : objets){
if (objet.estRobot){
int nPris = 0;
while (!jouetsPasRanges.empty() && nPris < limite){
jouetsPasRanges.pop();
nPris++;
}
}
else {
objet.triTaille = true;
jouetsPasRanges.push(objet);
objet.triTaille = false;
}
}
//Il reste quelque truc qu'on va essayer de recup
vector<Chose> objetsn;
while (!jouetsPasRanges.empty()){
Chose jouet = jouetsPasRanges.top();
jouet.triTaille = true;
objetsn.pb(jouet);
jouetsPasRanges.pop();
}
for (Chose& robotPetit : robotsPetits){
robotPetit.triTaille = true;
objetsn.pb(robotPetit);
}
sort(all(objetsn));
//cout << "LMT " << limite << endl;
for (Chose& objet : objetsn){
objet.dbg();
if (objet.estRobot){
int nPris = 0;
while (!jouetsPasRanges.empty() && nPris < limite){
jouetsPasRanges.pop();
nPris++;
}
}
else {
objet.triTaille = false;
jouetsPasRanges.push(objet);
}
}
return jouetsPasRanges.empty();
}
int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]){
nFragiles = A;
nPetits = B;
nJouets = T;
robotsFragiles.resize(nFragiles);
robotsPetits.resize(nPetits);
jouets.resize(nJouets);
for (int ind = 0; ind < nFragiles; ++ind)
robotsFragiles[ind] = {true, false, -1, X[ind]};
for (int ind = 0; ind < nPetits; ++ind)
robotsPetits[ind] = {true, true, Y[ind], -1};
for (int ind = 0; ind < nJouets; ++ind)
jouets[ind] = {false, false, S[ind], W[ind]};
for (Chose& jouet : jouets){
jouet.triTaille = false;
objets.pb(jouet);
}
for (Chose& robotFragile : robotsFragiles)
objets.pb(robotFragile);
sort(all(objets));
int deb = 1, fin = 1e6 + 5;
while (fin > deb){
int milieu = (deb + fin)/2;
// cout << deb << " " << fin << " " << milieu << " " << fonctionne(milieu) << endl;
if (fonctionne(milieu))
fin = milieu;
else
deb = milieu + 1;
}
if (deb > nJouets)
return -1;
return deb;
}
# | 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... |