// File rope.cpp created on 14.10.2025 at 17:22:16
#include <bits/stdc++.h>
using i64 = long long;
#ifdef DEBUG
#include "/home/ahmetalp/Desktop/Workplace/debug.h"
#else
#define debug(...) void(23)
#endif
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int N, M;
std::cin >> N >> M;
std::vector<int> A(N);
for (int i = 0; i < N; ++i) {
std::cin >> A[i];
--A[i];
}
std::vector<int> overall(N);
for (int i = 0; i < N; ++i) {
overall[A[i]] += 1;
}
for (int c = 0; c < M; ++c) {
int ans = N - overall[c];
{ // Case 1: First single
std::vector<int> cnt(M);
int now = 0;
if (A[0] == c) {
// ok
} else {
cnt[A[0]] += 1;
}
for (int i = 1; i < N; i += 2) {
if (i + 1 == N) {
if (A[N - 1] == c) {
// ok
} else {
cnt[A[N - 1]] += 1;
}
} else {
int x = (A[i] == c) + (A[i + 1] == c);
if (x == 2) {
// ok
} else if (x == 1) {
now += 1;
} else {
cnt[A[i]] += 1;
cnt[A[i + 1]] += 1;
}
}
}
int mx = *std::max_element(cnt.begin(), cnt.end());
int sum = std::accumulate(cnt.begin(), cnt.end(), 0);
debug(now, cnt);
now += sum - mx;
ans = std::min(ans, now);
}
{ // Case 2: First both
std::vector<int> cnt(M);
int now = 0;
for (int i = 0; i < N; i += 2) {
if (i + 1 == N) {
if (A[N - 1] == c) {
// ok
} else {
cnt[A[N - 1]] += 1;
}
} else {
int x = (A[i] == c) + (A[i + 1] == c);
if (x == 2) {
// ok
} else if (x == 1) {
now += 1;
} else {
cnt[A[i]] += 1;
cnt[A[i + 1]] += 1;
}
}
}
int mx = *std::max_element(cnt.begin(), cnt.end());
int sum = std::accumulate(cnt.begin(), cnt.end(), 0);
debug(now, cnt);
now += sum - mx;
ans = std::min(ans, now);
}
std::cout << ans << '\n';
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |