https://www.acmicpc.net/problem/2531
λ¬Έμ
νμ μ΄λ°₯ μμμ μλ νμ νλ λ²¨νΈ μμ μ¬λ¬ κ°μ§ μ’ λ₯μ μ΄λ°₯μ΄ μ μμ λ΄κ²¨ λμ¬ μκ³ , μλμ μ΄ μ€μμ μκΈ°κ° μ’μνλ μ΄λ°₯μ 골λΌμ λ¨Ήλλ€. μ΄λ°₯μ μ’ λ₯λ₯Ό λ²νΈλ‘ ννν λ, λ€μ κ·Έλ¦Όμ νμ μ΄λ°₯ μμμ μ λ²¨νΈ μνμ μλ₯Ό 보μ¬μ£Όκ³ μλ€. λ²¨νΈ μμλ κ°μ μ’ λ₯μ μ΄λ°₯μ΄ λ μ΄μ μμ μ μλ€.
μλ‘ λ¬Έμ μ° νμ μ΄λ°₯ μμμ μ΄ λΆκ²½κΈ°λ‘ μμ μ΄ μ΄λ €μμ, λ€μκ³Ό κ°μ΄ λ κ°μ§ νμ¬λ₯Ό ν΅ν΄μ 맀μμ μ¬λ¦¬κ³ μ νλ€.
- μλ νμ μ΄λ°₯μ μλμ΄ λ§μλλ‘ μ΄λ°₯μ κ³ λ₯΄κ³ , λ¨Ήμ μ΄λ°₯λ§νΌ μλλ₯Ό κ³μ°νμ§λ§, 벨νΈμ μμμ ν μμΉλΆν° kκ°μ μ μλ₯Ό μ°μν΄μ λ¨Ήμ κ²½μ° ν μΈλ μ μ‘ κ°κ²©μΌλ‘ μ 곡νλ€.
- κ° κ³ κ°μκ² μ΄λ°₯μ μ’ λ₯ νλκ° μ°μΈ μΏ ν°μ λ°ννκ³ , 1λ² νμ¬μ μ°Έκ°ν κ²½μ° μ΄ μΏ ν°μ μ νμ§ μ’ λ₯μ μ΄λ°₯ νλλ₯Ό μΆκ°λ‘ 무λ£λ‘ μ 곡νλ€. λ§μ½ μ΄ λ²νΈμ μ νμ§ μ΄λ°₯μ΄ νμ¬ λ²¨νΈ μμ μμ κ²½μ°, μ리μ¬κ° μλ‘ λ§λ€μ΄ μλμκ² μ 곡νλ€.
μ ν μΈ νμ¬μ μ°Έμ¬νμ¬ κ°λ₯ν ν λ€μν μ’ λ₯μ μ΄λ°₯μ λ¨ΉμΌλ €κ³ νλ€. μ κ·Έλ¦Όμ μλ₯Ό κ°μ§κ³ μκ°ν΄λ³΄μ. k=4μ΄κ³ , 30λ² μ΄λ°₯μ μΏ ν°μΌλ‘ λ°μλ€κ³ κ°μ νμ. μΏ ν°μ κ³ λ €νμ§ μμΌλ©΄ 4κ°μ§ λ€λ₯Έ μ΄λ°₯μ λ¨Ήμ μ μλ κ²½μ°λ (9, 7, 30, 2), (30, 2, 7, 9), (2, 7, 9, 25) μΈ κ°μ§ κ²½μ°κ° μλλ°, 30λ² μ΄λ°₯μ μΆκ°λ‘ μΏ ν°μΌλ‘ λ¨Ήμ μ μμΌλ―λ‘ (2, 7, 9, 25)λ₯Ό κ³ λ₯΄λ©΄ 5κ°μ§ μ’ λ₯μ μ΄λ°₯μ λ¨Ήμ μ μλ€.
νμ μ΄λ°₯ μμμ μ λ²¨νΈ μν, λ©λ΄μ μλ μ΄λ°₯μ κ°μ§μ, μ°μν΄μ λ¨Ήλ μ μμ κ°μ, μΏ ν° λ²νΈκ° μ£Όμ΄μ‘μ λ, μλμ΄ λ¨Ήμ μ μλ μ΄λ°₯ κ°μ§μμ μ΅λκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫 λ²μ§Έ μ€μλ νμ μ΄λ°₯ 벨νΈμ λμΈ μ μμ μ N, μ΄λ°₯μ κ°μ§μ d, μ°μν΄μ λ¨Ήλ μ μμ μ k, μΏ ν° λ²νΈ cκ° κ°κ° νλμ λΉ μΉΈμ μ¬μ΄μ λκ³ μ£Όμ΄μ§λ€. λ¨, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ k ≤ 3,000 (k ≤ N), 1 ≤ c ≤ dμ΄λ€. λ λ²μ§Έ μ€λΆν° Nκ°μ μ€μλ 벨νΈμ ν μμΉλΆν° μμνμ¬ νμ λ°©ν₯μ λ°λΌκ° λ μ΄λ°₯μ μ’ λ₯λ₯Ό λνλ΄λ 1 μ΄μ d μ΄νμ μ μκ° κ° μ€λ§λ€ νλμ© μ£Όμ΄μ§λ€.
μΆλ ₯
μ£Όμ΄μ§ νμ μ΄λ°₯ 벨νΈμμ λ¨Ήμ μ μλ μ΄λ°₯μ κ°μ§μμ μ΅λκ°μ νλμ μ μλ‘ μΆλ ₯νλ€.
νμ΄
ν¬κΈ°κ° kμΈ μ¬λΌμ΄λ© μλμ°λ₯Ό μ¬μ©νλ€
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <deque>
using namespace std;
// μΈμλ‘ λ°μ eat ν λ΄μ μ΄λ°₯μ μ’
λ₯μ κ°―μλ₯Ό μΉ΄μ΄νΈν΄μ 리ν΄
int countKind(deque<int> q, int k, int d, int c) {
vector<bool> isEat(d+1, false);
isEat[c] = true;
for(int i=0; i<k; i++) {
isEat[q.front()]=true;
q.pop_front();
}
int kind = 0;
for(int i=1; i<=d; i++) {
if(isEat[i])
kind++;
}
return kind;
}
// λ¨Ήμ μ μλ μ΄λ°₯μ μ΅λ κ°μ§μ
int maxKind(int n, int d, int k, int c, vector<int>&sushi) {
deque<int> eat;
for(int i=0; i<k; i++)
eat.push_back(sushi[i]);
int max_kind = countKind(eat, k, d, c);
for(int i=k; i<n+k; i++) {
int end = i>=n ? i-n : i; // μ¬λΌμ΄λ© μλμ°μ μΆκ°ν μΈλ±μ€ (sushi 벑ν°λ₯Ό νμ ν΄μΌνλ―λ‘ μμΈμ²λ¦¬)
eat.pop_front();
eat.push_back(sushi[end]);
max_kind = max(max_kind, countKind(eat, k, d, c));
}
return max_kind;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n, d, k, c;
cin >> n >> d >> k >> c;
vector<int> sushi(n);
for(int i=0; i<n; i++)
cin >> sushi[i];
cout << maxKind(n, d, k, c, sushi);
return 0;
}
/*
*/
'ποΈ ICPC Sinchon > Two Pointer' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ][C++] λ°±μ€ 2467λ²: μ©μ‘ (0) | 2024.08.18 |
---|---|
[BOJ][C++] λ°±μ€ 2003λ²: μλ€μ ν© 2 (0) | 2023.07.27 |
λ°±μ€ 10025λ²: κ²μΌλ₯Έ λ°±κ³° (0) | 2022.10.18 |
λ°±μ€ 1644λ²: μμμ μ°μν© (0) | 2022.10.18 |
λ°±μ€ 2470λ²: λ μ©μ‘ (0) | 2022.10.18 |