Submission #1165672

#TimeUsernameProblemLanguageResultExecution timeMemory
1165672SmuggingSpunPainting Walls (APIO20_paint)C++20
63 / 100
1596 ms40288 KiB
#include<bits/stdc++.h> #include "paint.h" using namespace std; const int INF = 1e9; template<class T>void minimize(T& a, T b){ if(a > b){ a = b; } } int minimumInstructions(int n, int m, int k, vector<int>c, vector<int>a, vector<vector<int>>b){ bool is_sub1 = true; auto pre_check = [&] (){ vector<int>cnt(k, 0); for(int i = 0; i < m; i++){ for(int& j : b[i]){ if(cnt[j]++ == 1){ is_sub1 = false; return; } } } }; pre_check(); if(is_sub1){ vector<int>to(k, -2); for(int i = 0; i < m; i++){ for(int& j : b[i]){ to[j] = i; } } int cnt = 1, ans = 0, pre = to[c[0]]; for(int i = 1; i < n; i++, cnt++){ if(cnt == m){ cnt = 0; if((pre = to[c[i]]) == -2){ return -1; } ans++; } else if(to[c[i]] != (pre = (pre + 1) % m)){ return -1; } } return ans + 1; } if(n <= 500 && m <= 200){ vector<vector<int>>p(k); for(int i = 0; i < n; i++){ p[c[i]].emplace_back(i); } vector<vector<bool>>can(m, vector<bool>(n, false)); for(int i = 0; i < m; i++){ for(int& j : b[i]){ for(int& k : p[j]){ can[i][k] = true; } } } vector<bool>paint(n, false); for(int i = 0; i + m <= n; i++){ for(int j = 0; j < m; j++){ bool flag = true; for(int k = 0; k < m; k++){ if(!can[(j + k) % m][i + k]){ flag = false; break; } } if(flag){ paint[i] = true; break; } } } vector<int>dp(n + 1, INF); dp[n] = 0; for(int i = n - 1; i > -1; dp[i--]++){ for(int j = min(i, n - m); j >= max(0, i - m + 1); j--){ if(paint[j]){ for(int k = i; k < j + m; k++){ minimize(dp[i], dp[k + 1]); } break; } } } return dp[0] >= INF ? -1 : 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:89:1: warning: control reaches end of non-void function [-Wreturn-type]
   89 | }
      | ^
#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...