제출 #1059421

#제출 시각아이디문제언어결과실행 시간메모리
1059421vjudge1로봇 (IOI13_robots)C++17
53 / 100
160 ms24160 KiB
#include "robots.h" #include<bits/stdc++.h> #define ll long long using namespace std; vector<pair<int,int>> Tw,Ts; int a, b, t; vector<int> x, y; bool bcheck(int n){ int pos=0,cnt=n,toys_cnt1=0,toys_cnt2=0; vector<bool> Tbool1(t,0), Tbool2(t,0); for(int i=0; i < t; i++){ if(Tw[i].first < x[pos]){ cnt--; toys_cnt1++; Tbool1[Tw[i].second] = 1; } if(cnt == 0){ cnt = n; pos++; } if(pos >= a)break; } if(b == 0)return toys_cnt1 == t; pos = 0; cnt = n; for(int i=0; i < t; i++){ if(Ts[i].first < y[pos] && !Tbool1[Ts[i].second]){ cnt--; toys_cnt1++; Tbool1[Ts[i].second] = 1; } if(cnt == 0){ cnt = n; pos++; } if(pos >= b)break; } if(b != 0){ pos = 0; cnt = n; for(int i=0; i < t; i++){ if(Ts[i].first < y[pos]){ cnt--; toys_cnt2++; Tbool2[Ts[i].second] = 1; } if(cnt == 0){ cnt = n; pos++; } if(pos >= b)break; } if(a == 0)return toys_cnt2 == t; pos = 0; cnt = n; for(int i=0; i < t; i++){ if(Tw[i].first < x[pos] && !Tbool2[Tw[i].second]){ cnt--; toys_cnt2++; Tbool2[Tw[i].second] = 1; } if(cnt == 0){ cnt = n; pos++; } if(pos >= a)break; } } return toys_cnt1 == t || toys_cnt2 == t; } int binary(int l, int r){ int n; while(l <= r){ n = (l+r)/2; if(bcheck(n)){ r = n-1; }else{ l = n+1; } } return l; } int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { int ans=-1; if(T == 2 && A+B == 2){ for(int i=0; i < T; i++){ Tw.push_back({W[i],S[i]}); Ts.push_back({S[i],W[i]}); } sort(Tw.rbegin(),Tw.rend()); sort(Ts.rbegin(),Ts.rend()); int r1=0,r2=0; if(A == 2){ for(int i=0; i < T; i++){ if(Tw[i].first < X[0]){ r1++; } if(Tw[i].first < X[1]){ r2++; } } }else if(B == 2){ for(int i=0; i < T; i++){ if(Ts[i].first < Y[0]){ r1++; } if(Ts[i].first < Y[1]){ r2++; } } }else{ for(int i=0; i < T; i++){ if(Tw[i].first < X[0]){ r1++; } } for(int i=0; i < T; i++){ if(Ts[i].first < Y[0]){ r2++; } } } ans=-1; if((r1 == 2 && r2 >= 1) || (r2 == 2 && r1 >= 1)){ ans = 1; }else if((r1 == 2 && r2 == 0) || (r2 == 2 && r1 == 0)){ ans = 2; }else if(r1 == 1 && r2 == 1){ int a,b; for(int i=0; i < T; i++){ if(Tw[i].first < X[0]){ a = i; } if(Tw[i].second < Y[0]){ b = i; } } if(a != b){ ans = 1; } } return ans; } a = A; b = B; t = T; for(int i=0; i < A; i++){ x.push_back(X[i]); } sort(x.rbegin(),x.rend()); for(int i=0; i < B; i++){ y.push_back(Y[i]); } sort(y.rbegin(),y.rend()); for(int i=0; i < T; i++){ Tw.push_back({W[i],i}); Ts.push_back({S[i],i}); } sort(Tw.rbegin(),Tw.rend()); sort(Ts.rbegin(),Ts.rend()); ans=binary(1,T); if(ans > T)ans = -1; return ans; }
#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...