Submission #892093

#TimeUsernameProblemLanguageResultExecution timeMemory
892093omeganotPainting Walls (APIO20_paint)C++11
63 / 100
598 ms524288 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int MOD = 1E9 + 7; const int INF = 1E9; const ll INFLL = 1E18; const int MAX = 6E7; int val[MAX]; int len[MAX]; int group[MAX]; int minimumInstructions(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) { if(M > 1) { vector<int> bv(N + 1); vector<int> cnt(K); int unique = 0; for(int i = 0; i < M; i++) { if(!cnt[C[i]]) { unique++; } cnt[C[i]]++; } if(unique * 632 < M) { return -1; } else { bv[0]++; bv[M]--; } for(int i = 0; i + M < N; i++) { if(cnt[C[i]] == 1) { unique--; } cnt[C[i]]--; if(!cnt[C[i + M]]) { unique++; } if(unique * 632 >= M) { bv[i + 1]++; bv[i + M + 1]--; } } for(int i = 1; i < N; i++) { bv[i] += bv[i - 1]; if(!bv[i]) { return -1; } } } vector<basic_string<int>> kc(K); for(int i = 0; i < M; i++) { for(int j : B[i]) { kc[j].push_back(i); } } vector<basic_string<int>> a(N); int curr = 0; vector<basic_string<int>> pos(M); for(int i = 0; i < N; i++) { a[i] = kc[C[i]]; for(int j = 0; j < a[i].size(); j++) { val[curr] = a[i][j]; pos[a[i][j]].push_back(curr); a[i][j] = curr; group[curr] = i; curr++; } } vector<int> ind(M); for(int i = 0; i + 1 < N; i++) { for(int j : a[i]) { ind[val[j]]++; } for(int j = 0; j < a[i].size(); j++) { int v = val[a[i][j]]; if(ind[(v + 1) % M] < pos[(v + 1) % M].size() && group[pos[(v + 1) % M][ind[(v + 1) % M]]] == i + 1) { len[pos[(v + 1) % M][ind[(v + 1) % M]]] = len[a[i][j]] + 1; } } } int currR = -1; int maxR = -1; bool ok = true; int ans = 0; for(int i = 0; i + M - 1 < N; i++) { if(currR + 1 < i) { ok = false; break; } for(int j : a[i + M - 1]) { if(len[j] >= M - 1) { maxR = max(maxR, i + M - 1); } } if(currR < i) { ans++; currR = maxR; } } if(maxR != N - 1) { ok = false; } if(currR + 1 < N) { ans++; } return (ok ? ans : -1); }

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:63:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |         for(int j = 0; j < a[i].size(); j++) {
      |                        ~~^~~~~~~~~~~~~
paint.cpp:76:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |         for(int j = 0; j < a[i].size(); j++) {
      |                        ~~^~~~~~~~~~~~~
paint.cpp:78:33: warning: comparison of integer expressions of different signedness: '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'} and 'std::__cxx11::basic_string<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |             if(ind[(v + 1) % M] < pos[(v + 1) % M].size() && group[pos[(v + 1) % M][ind[(v + 1) % M]]] == i + 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...