이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "robots.h"
#include <bits/stdc++.h>
const int N = 1e6 + 6 ;
int AA , BB , TT ;
int XX[N] , YY[N] , WW[N] , SS[N] ;
using namespace std ;
struct DSU{
vector<int> fat ;
void init(int n){
fat.resize(n) ;
for(int i = 0 ; i < n; i++){
fat[i] = i ;
}
}
int fin(int x){
return fat[x] = (fat[x]==x?x:fin(fat[x]));
}
void unio(int a , int b){
int aa = fin(a) ;
int bb = fin(b) ;
if(aa!=bb){
fat[aa] = bb ;
}
}
};
bool check(int x){
vector< pair<int, int > > fr , se;
for(int i = 0 ; i < TT ; i++){
fr.push_back({WW[i] , i }) ;
}
sort(fr.begin() , fr.end()) ;
vector<int> vis(N , 0 );
DSU d1 ;
d1.init(TT+1) ;
for(int i = 0 ; i < AA && fr.size(); i++){
int j = (int)(lower_bound(fr.begin() , fr.end() , make_pair(XX[i] , 0) ) - fr.begin()) ;
if(!j)continue; j--;
j = d1.fin(j);
vector<int> aux;
int k = x ;
while(k-- && j>=0){
int r = fr[j].second ;
vis[r] ++ ;
if(j){
d1.unio(j , j-1);
j = d1.fin(j) ;
}
else break;
}
}
for(auto u : fr){
if(!vis[u.second]){
se.push_back({SS[u.second] , u.second}) ;
}
}
/*for(auto u : fr){
se.insert({SS[u.second] , u.second}) ;
}
for(int i = 0 ; i < BB && se.size(); i++){
set<pair<int, int > > ::iterator j = se.lower_bound({YY[i] , -1e7});
if(j==se.begin())continue ;
j = prev(j) ;
vector<int> aux ;
int k = x ;
while(k--){
aux.push_back((*j).second) ;
if(j==se.begin())
break;
j = prev(j) ;
}
for(auto u : aux)
se.erase({SS[u] , u}) ;
}*/
return !se.size() ;
}
int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
AA = A ; BB= B ; TT = T ;
for(int i = 0 ; i < A ; i++)XX[i] = X[i] ;
for(int i = 0 ; i < B ; i++)YY[i] = Y[i] ;
for(int i = 0 ; i < T ; i++){
WW[i] = W[i] ;
SS[i] = S[i] ;
}
sort(XX , XX + AA) ;
sort(YY , YY + BB) ;
int l = 1 , r = T ;
int ans = -1;
while(l<=r){
int mid = (l+r) /2;
//cout<<l <<" " << r<<" " << mid<<"\n" ;
if(check(mid)){
ans = mid ;
r = mid - 1 ;
}
else{
l = mid + 1 ;
}
}
return ans ;
}
컴파일 시 표준 에러 (stderr) 메시지
robots.cpp: In function 'bool check(int)':
robots.cpp:41:9: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
if(!j)continue; j--;
^~
robots.cpp:41:25: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
if(!j)continue; j--;
^
# | 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... |