Submission #1227407

#TimeUsernameProblemLanguageResultExecution timeMemory
1227407chaeryeongRope (JOI17_rope)C++20
45 / 100
2595 ms840 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6 + 1; int n, m, c[N], mn[N]; void solve () { cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> c[i]; } for (int i = 1; i <= m; i++) { mn[i] = 1e9; } if (n % 2 == 1) { for (int i = 1; i <= m; i++) { /* for (int j = 1; j <= m; j++) { int sum = 0; int delta = 1e9; for (int k = 1; k < n; k += 2) { sum += min((c[k] != i) + (c[k + 1] != i), (c[k] != j) + (c[k + 1] != j)); delta = min(delta, (c[k] != i) + (c[k + 1] != i) - (c[k] != j) - (c[k + 1] != j)); } sum += min(c[n] != i, c[n] != j); delta = min(delta, (c[n] != i) - (c[n] != j)); delta = max(delta, 0); mn[i] = min(mn[i], sum); }*/ vector <int> ff(m + 1, 0); int s = 0, v = 0; for (int j = 1; j < n; j += 2) { if (c[j] != i && c[j + 1] != i) { ff[c[j]]++; ff[c[j + 1]]++; s += 2; } else { v += c[j] != i; v += c[j + 1] != i; } } if (c[n] != i) { ff[c[n]]++; s++; } int cnt = 0; for (int j = 1; j <= m; j++) { cnt += c[j] == i; } mn[i] = min(mn[i], v + s - *max_element(ff.begin(), ff.end())); } } if (n % 2 == 1) { for (int i = 1; i <= m; i++) { for (int j = 1; j <= m; j++) { int sum = 0; int delta = 1e9; for (int k = 2; k <= n; k += 2) { sum += min((c[k] != i) + (c[k + 1] != i), (c[k] != j) + (c[k + 1] != j)); delta = min(delta, (c[k] != i) + (c[k + 1] != i) - (c[k] != j) - (c[k + 1] != j)); } sum += min(c[1] != i, c[1] != j); delta = min(delta, (c[1] != i) - (c[1] != j)); delta = max(delta, 0); mn[i] = min(mn[i], sum + delta); } } } if (n % 2 == 0) { for (int i = 1; i <= m; i++) { for (int j = 1; j <= m; j++) { int sum = 0; int delta = 1e9; for (int k = 2; k < n; k += 2) { sum += min((c[k] != i) + (c[k + 1] != i), (c[k] != j) + (c[k + 1] != j)); delta = min(delta, (c[k] != i) + (c[k + 1] != i) - (c[k] != j) - (c[k + 1] != j)); } sum += min(c[n] != i, c[n] != j); sum += min(c[1] != i, c[1] != j); delta = min(delta, (c[1] != i) - (c[1] != j)); delta = min(delta, (c[n] != i) - (c[n] != j)); delta = max(delta, 0); mn[i] = min(mn[i], sum + delta); } } } if (n % 2 == 0) { for (int i = 1; i <= m; i++) { for (int j = 1; j <= m; j++) { int sum = 0; int delta = 1e9; for (int k = 1; k <= n; k += 2) { sum += min((c[k] != i) + (c[k + 1] != i), (c[k] != j) + (c[k + 1] != j)); delta = min(delta, (c[k] != i) + (c[k + 1] != i) - (c[k] != j) - (c[k + 1] != j)); } delta = max(delta, 0); mn[i] = min(mn[i], sum + delta); } } } for (int i = 1; i <= m; i++) { cout << mn[i] << '\n'; } } signed main () { ios::sync_with_stdio(0); cin.tie(0); int tc = 1; //cin >> tc; while (tc--) solve(); }
#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...