Submission #297230

#TimeUsernameProblemLanguageResultExecution timeMemory
297230PeppaPigPainting Walls (APIO20_paint)C++14
100 / 100
525 ms15348 KiB
#include "paint.h" #include <bits/stdc++.h> #define pii pair<int, int> #define x first #define y second using namespace std; const int N = 1e5 + 5; const int M = 650; int n, m, k; int valid[N], dp[N]; vector<int> col[N]; int minimumInstructions(int _n, int _m, int _k, vector<int> C, vector<int> A, vector<vector<int> > B) { fill_n(dp, N, 1e9); n = _n, m = _m, k = _k; C.insert(C.begin(), 0), A.insert(A.begin(), 0), B.insert(B.begin(), vector<int>()); for(int i = 1; i <= m; i++) for(int x : B[i]) col[x].emplace_back(i); vector<int> pre(M, 0); for(int i = 1; i <= n; i++) { int j = 1; vector<int> cur(M, 1); for(int idx = 0; idx < col[C[i]].size(); idx++) { int x = col[C[i]][idx]; if(x != 1) { while(j + 1 <= col[C[i - 1]].size() && col[C[i - 1]][j] <= x - 1) ++j; if(j > col[C[i - 1]].size() || col[C[i - 1]][j - 1] != x - 1) continue; cur[idx + 1] = pre[j] + 1; } else { if(col[C[i - 1]].empty() || col[C[i - 1]].back() != m) continue; cur[idx + 1] = pre[col[C[i - 1]].size()] + 1; } if(cur[idx + 1] >= m) valid[i] = true; } swap(cur, pre); } deque<pii> Q; Q.emplace_back(0, dp[0] = 0); for(int i = 1; i <= n; i++) { while(!Q.empty() && Q.front().x < i - m) Q.pop_front(); if(valid[i] && !Q.empty()) { dp[i] = Q.front().y + 1; while(!Q.empty() && Q.back().y > dp[i]) Q.pop_back(); Q.emplace_back(i, dp[i]); } } return dp[n] == 1e9 ? -1 : dp[n]; }

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:30:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |         for(int idx = 0; idx < col[C[i]].size(); idx++) {
      |                          ~~~~^~~~~~~~~~~~~~~~~~
paint.cpp:33:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |                 while(j + 1 <= col[C[i - 1]].size() && col[C[i - 1]][j] <= x - 1)
      |                       ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
paint.cpp:35:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |                 if(j > col[C[i - 1]].size() || col[C[i - 1]][j - 1] != x - 1)
      |                    ~~^~~~~~~~~~~~~~~~~~~~~~
#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...