-
[22857] 가장 긴 짝수 연속한 부분 수열 (small)BOJ 2021. 10. 11. 23:28
https://www.acmicpc.net/problem/22857
22857번: 가장 긴 짝수 연속한 부분 수열 (small)
수열 $S$에서 최대 $K$번 원소를 삭제한 수열에서 짝수로 이루어져 있는 연속한 부분 수열 중 가장 긴 길이를 출력한다.
www.acmicpc.net
<문제>
투포인터로 해결할 수 있다.
구간 [i, j]에 cnt개의 홀수가 존재한다면, score는 (j - i + 1) - cnt이고, 이것이 구간 [i, j]에서의 최적해이다.
이를 바탕으로 score의 최대값을 투포인터의 탐색과정동안 업데이트해주었다.
<소스코드>
1234567891011121314151617181920212223242526272829303132333435#include <bits/stdc++.h>using namespace std;int n, k, a[50001];bool flag;int main(void) {cin >> n >> k;int i, j;for (i = 0; i < n; i++) {cin >> a[i];if (a[i] % 2 == 0) flag = true;}i = j = 0;int cnt = a[0] % 2;int ans = 0;while (i <= j && j < n) {if (cnt <= k && j + 1 < n) {j++;if (a[j] % 2 == 1) {cnt++;}} else {if (a[i] % 2 == 1) {cnt--;}i++;}if (cnt <= k) {int score = (j - i + 1) - cnt;ans = max(score, ans);}}if (flag) ans = max(1, ans);cout << ans;return 0;}cs 'BOJ' 카테고리의 다른 글
[22869] 징검다리 건너기 (small) (0) 2021.10.12 [21317] 징검다리 건너기 (0) 2021.10.11 [17071] 숨바꼭질 5 (0) 2021.10.11 [7785] 회사에 있는 사람 (0) 2021.10.09 [1062] 가르침 (0) 2021.10.09