제출 #387147

#제출 시각아이디문제언어결과실행 시간메모리
387147talant117408벽 칠하기 (APIO20_paint)C++17
28 / 100
1589 ms11628 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair <int, int> pii; typedef pair <ll, ll> pll; #define sz(v) (int)v.size() #define pb push_back #define mp make_pair #define all(v) v.begin(), v.end() const int MAXN = 1e5+7; int n, m, k; int color[MAXN]; //~ vector <int> isLiked[MAXN]; map <pii, bool> isLiked; int minimumInstructions(int N, int M, int K, vector<int> C, vector<int> A, vector<vector<int>> B) { n = N; m = M; k = K; for (int i = 0; i < n; i++) color[i] = C[i]; for (int i = 0; i < m; i++) { for (auto to : B[i]) { isLiked[mp(to, i)] = 1; } } int fk = 0; for (int i = 0; i < k; i++) { //fk = max(fk, sz(isLiked[i])); } /*if (fk < 2) { for (int i = 0; i+m < n; i++) { if (color[i] != color[i+m]) return -1; } if (sz(isLiked[color[0]]) == 0) { return -1; } else { int start = isLiked[color[0]].back(); for (int i = 0; i < m; i++) { if (sz(isLiked[color[i]]) == 0 || isLiked[color[i]].back() != (start+i)%m) { return -1; } } } return (n+m-1)/m; } else {*/ vector <int> pos; for (int start = 0; start < m; start++) { int bad = 0; for (int i = 0; i < n; i++) { if (!isLiked.count(mp(color[i], (start+i)%m))) { bad++; } if (i >= m) { if (!isLiked.count(mp(color[i-m], (start+i-m)%m))) { bad--; } } if (i >= m-1 && bad == 0) { pos.pb(i-m+1); } } } sort(all(pos)); if (sz(pos) == 0) return -1; vector <int> v; for (int i = 0; i < sz(pos); i++) { if (sz(v) == 0 || (sz(v) == 1 && v.back() != pos[i])) { v.pb(pos[i]); } else if (v[sz(v)-2]+m >= pos[i]) { v.pop_back(); v.pb(pos[i]); } else if (v.back() != pos[i]) { v.pb(pos[i]); } } int flag = 1, cnt = 0; vector <int> pref(n), have(n); for (auto to : pos) { pref[to]++; if (to + m < n) pref[to+m]--; } for (int i = 0; i < n; i++) { cnt += pref[i]; if (cnt) have[i] = 1; } for (int i = 0; i < n; i++) { if (!have[i]) flag = 0; } if (flag == 0) return -1; return sz(v); // } return 0; } /* 8 3 5 3 3 1 3 4 4 2 2 3 0 1 2 2 2 3 2 3 4 */

컴파일 시 표준 에러 (stderr) 메시지

paint.cpp: In function 'int minimumInstructions(int, int, int, std::vector<int>, std::vector<int>, std::vector<std::vector<int> >)':
paint.cpp:29:6: warning: unused variable 'fk' [-Wunused-variable]
   29 |  int fk = 0;
      |      ^~
#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...