제출 #1287799

#제출 시각아이디문제언어결과실행 시간메모리
1287799hynmjLine Town (CCO23_day1problem3)C++20
0 / 25
1 ms568 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const long long N = 2e5 + 5; int a[N]; const int inf = 1e2; int dp[N][2][2]; // min operations, i = index, j= a[i] == -1 or else , k= operation pending , till i a is sorted; void solve() { int n; cin >> n; for (int i = 0; i < n; i++) { dp[i][0][0] = inf; dp[i][0][1] = inf; dp[i][1][0] = inf; dp[i][1][1] = inf; cin >> a[i]; } if (n == 1) { cout << 0; return; } if (n == 2) { if (is_sorted(a, a + n)) { cout << 0; return; } else { cout << -1; return; } } if (a[0] == -1) { dp[0][0][0] = 0; dp[0][1][1] = 1; } else if (a[0] == 1) { dp[0][0][1] = 1; dp[0][1][0] = 0; } for (int i = 1; i < n; i++) { // cout << a[i] << endl; if (a[i] == 1) { // changing it dp[i][0][1] = min(dp[i][0][1], dp[i - 1][0][0] + 1); dp[i][0][0] = min(dp[i][0][0], dp[i - 1][0][1]); // not changing it dp[i][1][0] = min(dp[i][1][0], dp[i - 1][0][0]); dp[i][1][1] = min(dp[i][1][1], dp[i - 1][0][1]); dp[i][1][0] = min(dp[i][1][0], dp[i - 1][1][0]); dp[i][1][1] = min(dp[i][1][1], dp[i - 1][1][1]); } else if (a[i] == -1) { // 1 -> changing it without cost dp[i][1][0] = min(dp[i][1][0], dp[i - 1][0][1]); dp[i][1][1] = min(dp[i][1][1], dp[i - 1][0][1]); dp[i][1][0] = min(dp[i][1][0], dp[i - 1][1][1]); dp[i][1][1] = min(dp[i][1][1], dp[i - 1][1][1]); // 1 -> changing it with cost dp[i][1][0] = min(dp[i][1][0], dp[i - 1][0][0] + 1); dp[i][1][1] = min(dp[i][1][1], dp[i - 1][0][0] + 1); dp[i][1][0] = min(dp[i][1][0], dp[i - 1][1][0] + 1); dp[i][1][1] = min(dp[i][1][1], dp[i - 1][1][0] + 1); // 2 -> not changing it dp[i][0][1] = min(dp[i][0][1], dp[i - 1][0][1]); dp[i][0][0] = min(dp[i][0][1], dp[i - 1][0][0]); } // cout << min(dp[i][1][0], dp[i][0][0]) << ' '; } // for (int i = 0; i < n; i++) // { // // cout << dp[i][0][0] << ' ' << dp[i][0][1] << ' ' << dp[i][1][0] << ' ' << dp[i][1][1] << ' ' << endl; // } cout << min(dp[n - 1][1][0], dp[n - 1][0][0]) << endl; } signed main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int t = 1; // cin >> t; for (int i = 1; i <= t; i++) { // cout << "Case #" << i << ':' << ' '; solve(); cout << endl; } return 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...