Submission #935186

#TimeUsernameProblemLanguageResultExecution timeMemory
935186MinaRagy06Painting Walls (APIO20_paint)C++17
51 / 100
1210 ms83888 KiB
#include <bits/stdc++.h> #ifdef MINA #include "grader.cpp" #endif #include "paint.h" using namespace std; #define ll long long const int M = 50'005; vector<int> gud[2 * M + 5]; int minimumInstructions(int n, int m, int K, vector<int> a, vector<int> sz, vector<vector<int>> b) { vector<int> col[K]; for (int i = 0; i < m; i++) { for (auto j : b[i]) { col[j].push_back(i); } } vector<int> diff[n]; for (int i = 0; i < n; i++) { for (auto j : col[a[i]]) { gud[i - j + M].push_back(i); // diff[i].push_back(i - j); } // sort(diff[i].begin(), diff[i].end()); } int dp[n + 1]{}; dp[n] = 0; for (int i = n - 1; i > n - m; i--) { dp[i] = 1e9; } for (int i = n - m; i >= 0; i--) { dp[i] = 1e9; bool ok = 0; for (auto j : col[a[i]]) { bool ok2 = 1; int st = i + m - j; int s = lower_bound(gud[i - j + M].begin(), gud[i - j + M].end(), i) - gud[i - j + M].begin(); int e = lower_bound(gud[i - j + M].begin(), gud[i - j + M].end(), st - 1) - gud[i - j + M].begin(); ok2 &= e - s + 1 == st - i; ok2 &= e < gud[i - j + M].size() && gud[i - j + M][e] == st - 1 && gud[i - j + M][s] == i; if (st <= i + m - 1) { s = lower_bound(gud[st + M].begin(), gud[st + M].end(), st) - gud[st + M].begin(); e = lower_bound(gud[st + M].begin(), gud[st + M].end(), i + m - 1) - gud[st + M].begin(); ok2 &= e - s + 1 == i + m - st; ok2 &= e < gud[st + M].size() && gud[st + M][e] == i + m - 1 && gud[st + M][s] == st; } // for (int k = i; k < st; k++) { // gud &= binary_search(diff[k].begin(), diff[k].end(), i - j); // } // for (int k = st; k < i + m; k++) { // gud &= binary_search(diff[k].begin(), diff[k].end(), st); // } ok |= ok2; } if (ok) { for (int j = i + 1; j <= i + m; j++) { dp[i] = min(dp[i], dp[j] + 1); } } } if (dp[0] >= (int)1e9) return -1; return dp[0]; }

Compilation message (stderr)

paint.cpp: In function 'int minimumInstructions(int, int, int, std::vector<int>, std::vector<int>, std::vector<std::vector<int> >)':
paint.cpp:40:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |    ok2 &= e < gud[i - j + M].size() && gud[i - j + M][e] == st - 1 && gud[i - j + M][s] == i;
      |           ~~^~~~~~~~~~~~~~~~~~~~~~~
paint.cpp:45:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |     ok2 &= e < gud[st + M].size() && gud[st + M][e] == i + m - 1 && gud[st + M][s] == st;
      |            ~~^~~~~~~~~~~~~~~~~~~~
#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...