이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "robots.h"
#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
int f(int xf[], int yf){
if(xf[yf]==yf)return yf;
else return xf[yf]=f(xf, xf[yf]);
}
int putaway(int A, int B, int T, int X[], int Y[], int w[], int s[]) {
vector<int> x, y;
for(int i=0; i<A; i++)x.push_back(X[i]);
x.push_back(0);
for(int i=0; i<B; i++)y.push_back(Y[i]);
y.push_back(0);
sort(x.begin(), x.end());
sort(y.begin(), y.end());
pair<int, int> a[T];
int l, r, m, b[T], b1[A+2], b2[B+2], nexa[A+2], nexb[B+2], c[20];
for(int i=0; i<T; i++){
l=0;
r=A+1;
while(l+1<r){
m=(l+r)/2;
if(w[i]>=x[m])l=m;
else r=m;
}
a[i].F=r;
l=0;
r=B+1;
while(l+1<r){
m=(l+r)/2;
if(s[i]>=y[m])l=m;
else r=m;
}
a[i].S=r;
}
sort(a, a+T);
l=0;
r=T+1;
while(l+1<r){
m=(l+r)/2;
c[1]=0;
for(int i=0; i<T; i++)b[i]=0;
for(int i=0; i<=A; i++){
b1[i]=0;
nexa[i]=i;
}
b1[A+1]=m;
nexa[A+1]=A+1;
for(int i=0; i<=B; i++){
b2[i]=0;
nexb[i]=i;
}
b2[B+1]=m;
nexb[B+1]=B+1;
for(int i=T-1; i>=0; i--){
c[0]=f(nexb, a[i].S);
if(c[0]!=B+1){
b[i]=1;
b2[c[0]]++;
if(b2[c[0]]==m)nexb[c[0]]=c[0]+1;
}
}
for(int i=0; i<T; i++){
if(!b[i]){
c[0]=f(nexa, a[i].F);
if(c[0]!=A+1){
b1[c[0]]++;
if(b1[c[0]]==m)nexa[c[0]]=c[0]+1;
}
else c[1]=1;
}
}
if(!c[1])r=m;
else l=m;
}
if(r==T+1)return -1;
return r;
}
# | 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... |