제출 #1227115

#제출 시각아이디문제언어결과실행 시간메모리
1227115chaeryeongRope (JOI17_rope)C++20
0 / 100
1 ms320 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6 + 1; int n, m, c[N]; /*map <vector <int>, int> dp; int good (vector <int> a) { if (a.size() <= 2) { return 1; } if (dp.count(a)) { return dp[a]; } bool ret = 0; for (int i = 1; i < (int)a.size(); i++) { vector <int> c; if (i >= (int)a.size() - i) { for (int j = i - 1; j >= 0; j--) { c.push_back(a[j]); } } else { for (int j = i; j < (int)a.size(); j++) { c.push_back(a[j]); } } bool flag = 1; for (int j = i - 1; j >= 0; j--) { if (i + (i - j) - 1 >= (int)a.size()) { break; } if (a[i + (i - j) - 1] != a[j]) { flag = 0; break; } } if (!flag) { continue; } ret |= flag && good(c); } return dp[a] = ret; }*/ void solve () { /*{ int x; cin >> x; for (int i = 0; i < (1 << x); i++) { vector <int> c(x, 0); for (int j = 0; j < x; j++) { c[j] = (i >> j) & 1; } int p[2] = {}; bool flag = 0; if (x % 2 == 1) { p[0] = p[1] = 0; for (int j = 0; j < x - 1; j++) { int k = j; while (k + 1 < x - 1 && c[k + 1] == c[j]) { k++; } int u = (k - j + 1) & 1; p[u]++; j = k; } flag |= p[1] == 0; p[0] = p[1] = 0; for (int j = 1; j < x; j++) { int k = j; while (k + 1 < x && c[k + 1] == c[j]) { k++; } int u = (k - j + 1) & 1; p[u]++; j = k; } flag |= p[1] == 0; } else { p[0] = p[1] = 0; for (int j = 0; j < x; j++) { int k = j; while (k + 1 < x && c[k + 1] == c[j]) { k++; } int u = (k - j + 1) & 1; p[u]++; j = k; } flag |= p[1] == 0; p[0] = p[1] = 0; for (int j = 1; j < x - 1; j++) { int k = j; while (k + 1 < x - 1 && c[k + 1] == c[j]) { k++; } int u = (k - j + 1) & 1; p[u]++; j = k; } flag |= p[1] == 0; } if (good(c)) { assert(flag); for (auto k : c) { cout << k << " "; } cout << '\n'; } else { assert(!flag); } } return; }*/ cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> c[i]; } for (int i = 1; i <= m; i++) { int mn = 1e9; for (int j = 1; j <= m; j++) { if (n % 2 == 1) { { 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 = min(mn, sum + delta); sum = 0; 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 = min(mn, sum + delta); } } else { { 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 = min(mn, sum + delta); sum = 0; 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 = min(mn, sum + delta); } } } cout << mn << '\n'; } /* for (int i = 1; i <= m; i++) { int mn = 1e9; for (int j = 1; j <= m; j++) { for (int k = 0; k < (1 << n); k++) { vector <int> a(n); int cnt = 0; for (int l = 0; l < n; l++) { if ((k >> l) & 1) { cnt += (i != c[l + 1]); } else { cnt += (j != c[l + 1]); } a[l] = (k >> l) & 1; } if (good(a)) { mn = min(mn, cnt); } } } cout << mn << '\n'; }*/ } signed main () { #ifndef ONLINE_JUDGE freopen("input_file", "r", stdin); freopen("output_file", "w", stdout); #endif ios::sync_with_stdio(0); cin.tie(0); int tc = 1; //cin >> tc; while (tc--) solve(); }

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

rope.cpp: In function 'int main()':
rope.cpp:198:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  198 |                 freopen("input_file", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
rope.cpp:199:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  199 |                 freopen("output_file", "w", stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...