Submission #379418

#TimeUsernameProblemLanguageResultExecution timeMemory
379418blueRobots (IOI13_robots)C++17
0 / 100
1 ms384 KiB
#include "robots.h" #include <algorithm> using namespace std; int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { sort(X, X+A); sort(Y, Y+B); int ct[A+1][B+1]; for(int i = 0; i < A+1; i++) for(int j = 0; j < B+1; j++) ct[i][j] = 0; for(int k = 0; k < T; k++) {//if toy k goes in row a of res, it means that a is the smallest robot which can pick up k int a = 0, b = 0; if(A == 0 || W[k] > X[A-1]) a = A; else { for(int bit = 12; bit >= 0; bit--) { if(a + (1 << bit) > A-1) continue; if(X[a + (1 << bit)] <= W[k]) a += (1 << bit); } if(X[a] <= W[k]) a++; } if(B == 0 || S[k] > Y[B-1]) b = B; else { for(int bit = 12; bit >= 0; bit--) { if(b + (1 << bit) > B-1) continue; if(Y[b + (1 << bit)] <= S[k]) b += (1 << bit); } if(Y[b] <= S[k]) b++; } ct[a][b]++; } if(ct[A][B]) return -1; for(int i = A-1; i >= 0; i--) ct[i][B] += ct[i+1][B]; for(int j = B-1; j >= 0; j--) ct[A][j] += ct[A][j+1]; for(int i = A-1; i >= 0; i--) { for(int j = B-1; j >= 0; j--) { ct[i][j] += ct[i][j+1] + ct[i+1][j] - ct[i+1][j+1]; } } int res = 0; for(int i = A; i >= 0; i--) { for(int j = B; j >= 0; j--) { if(i == A && j == B) continue; res = max(res, int(ct[i][j] / (A-i + B-j)) + int((ct[i][j] / (A-i + B-j)) != 0)); } } return res; }
#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...