Submission #1008593

#TimeUsernameProblemLanguageResultExecution timeMemory
1008593jer033Robots (IOI13_robots)C++17
90 / 100
174 ms65536 KiB
#include "robots.h" #include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; int binsearch(int target, vector<int> (&arr)) { int lo = 0; int hi = arr.size()-1; if (hi==-1) return 0; if (target>=arr[hi]) return hi+1; while (lo!=hi) { int mid = (lo+hi)/2; if (arr[mid]>target) hi = mid; else lo = mid+1; } return lo; } int cel(int a, int b)//ceiling division { if (a==0) return 0; return ((a-1)/b)+1; } int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { sort(X, X+A); sort(Y, Y+B); vector<int> x; vector<int> y; x.reserve(A); y.reserve(B); for (int i=0; i<A; i++) x.push_back(X[i]); for (int i=0; i<B; i++) y.push_back(Y[i]); vector<vector<int>> matrix(A+1, vector<int> (B+1, 0)); for (int i=0; i<T; i++) { int r = binsearch(W[i], x); int c = binsearch(S[i], y); //cout << "toy at row " << r << '\n'; matrix[r][c]++; } //cout << matrix[0][0] << matrix[1][0] << matrix[2][0] << matrix[3][0] << " balala\n"; for (int i=A; i>=0; i--) for (int j=B; j>=0; j--) { if (i!=A) matrix[i][j] = matrix[i][j]+matrix[i+1][j]; } for (int i=A; i>=0; i--) for (int j=B; j>=0; j--) { if (j!=B) matrix[i][j] = matrix[i][j]+matrix[i][j+1]; } //cout << "bad robot count: " << matrix[A][B] << '\n'; if (matrix[A][B]) return -1; int time = 0; for (int i=0; i<=A; i++) for (int j=0; j<=B; j++) if ((i+j)!=(A+B)) { int time_taken = cel(matrix[i][j], A-i+B-j); //cout << "row i contains " << matrix[i][j] << " toys, cumulatively and it takes " << time_taken << '\n'; time = max(time, time_taken); } return time; }
#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...