νμ μ΄λ°₯ (λ¬Έμ _ 15961)
νμ μ΄λ°₯ μμμ μλ νμ νλ λ²¨νΈ μμ μ¬λ¬ κ°μ§ μ’ λ₯μ μ΄λ°₯μ΄ μ μμ λ΄κ²¨ λμ¬ μκ³ , μλμ μ΄ μ€μμ μκΈ°κ° μ’μνλ μ΄λ°₯μ 골λΌμ λ¨Ήλλ€. μ΄λ°₯μ μ’ λ₯λ₯Ό λ²νΈλ‘ ννν λ, λ€μ κ·Έλ¦Όμ νμ μ΄λ°₯ μμμ μ λ²¨νΈ μνμ μλ₯Ό 보μ¬μ£Όκ³ μλ€. λ²¨νΈ μμλ κ°μ μ’ λ₯μ μ΄λ°₯μ΄ λ μ΄μ μμ μ μλ€.
μλ‘ λ¬Έμ μ° νμ μ΄λ°₯ μμμ μ΄ λΆκ²½κΈ°λ‘ μμ μ΄ μ΄λ €μμ, λ€μκ³Ό κ°μ΄ λ κ°μ§ νμ¬λ₯Ό ν΅ν΄μ 맀μμ μ¬λ¦¬κ³ μ νλ€.
- μλ νμ μ΄λ°₯μ μλμ΄ λ§μλλ‘ μ΄λ°₯μ κ³ λ₯΄κ³ , λ¨Ήμ μ΄λ°₯λ§νΌ μλλ₯Ό κ³μ°νμ§λ§, 벨νΈμ μμμ ν μμΉλΆν° 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 ≤ 3,000,000, 2 ≤ d ≤ 3,000, 2 ≤ k ≤ 3,000 (k ≤ N), 1 ≤ c ≤ dμ΄λ€.
λ λ²μ§Έ μ€λΆν° Nκ°μ μ€μλ 벨νΈμ ν μμΉλΆν° μμνμ¬ νμ λ°©ν₯μ λ°λΌκ° λ μ΄λ°₯μ μ’ λ₯λ₯Ό λνλ΄λ 1 μ΄μ d μ΄νμ μ μκ° κ° μ€λ§λ€ νλμ© μ£Όμ΄μ§λ€.
μΆλ ₯
μ£Όμ΄μ§ νμ μ΄λ°₯ 벨νΈμμ λ¨Ήμ μ μλ μ΄λ°₯μ κ°μ§μμ μ΅λκ°μ νλμ μ μλ‘ μΆλ ₯νλ€.
μμ
8 30 4 30
7
9
7
30
2
7
9
25
< answer >
5
νμ΄
무쑰건 kκ°λ₯Ό μ°μν΄μ λ¨Ήμ΄μΌ νκΈ° λλ¬Έμ μ²μλΆν° kκ°λ₯Ό μ°μν΄μ λ¨Ήμ΄λ³΄κ³ , ν μΉΈ μ΄λν΄μ μ°μν΄μ λ¨Ήμ΄λ³΄κ³ , ν μΉΈ λ μ΄λνκ³ μ΄λ°μμΌλ‘ μ§ννλ©΄ λλ€.
μ΄λ μ΅λλ‘ λ¨Ήμ μ μλ μ΄λ°₯μ μ’ λ₯λ₯Ό κ³μ°ν΄μΌ νκΈ° λλ¬Έμ μ§κΈκΉμ§ λ¨Ήμ μ΄λ°₯μ μ’ λ₯μ λͺκ°μ© λ¨Ήμλμ§ μ μ₯νλ κ³Όμ μ΄ νμνλ€.
selected[] - ν΄λΉ μ’
λ₯μ μ΄λ°₯μ λ¨Ήμ κ°μ
cnt - λ¨Ήμ μ΄λ°₯μ μ’
λ₯
μλ₯Ό λ€μ΄ 1 4 3 4 4 λ₯Ό μ°μν΄μ λ¨Ήμμ κ²½μ°
selected[1] = 1
selected[2] = 0
selected[3] = 1
selected[4] = 3
cnt =3
μ²μλΆν° kκ°λ₯Ό μ°μν΄ μ΄λ°₯μ λ¨ΉμΌλ©΄μ selectedμ cnt κ°μ μ§μ ν΄ μ€ λ€μ ν μΉΈμ© μ΄λ°₯μ λΉΌκ³ μΆκ°νλ κ³Όμ μ κ±°μ³μ€λ€.
0λ²μ§Έ μ΄λ°₯λΆν° 5λ²μ§ΈκΉμ§ λ¨Ήμλ€λ©΄, 1λ²μ§ΈλΆν° 6λ²μ§ΈκΉμ§ λ¨Ήλλ€κ³ μκ°νλ©΄ λλ€.
μ΄λ 2,3,4,5μ μ΄λ°₯μ λ¨Ήλ 건 λμΌνκΈ° λλ¬Έμ 0λ²μ§Έ μ΄λ°₯μ selectedμ cntμμ λΉΌμ£Όκ³ 6λ²μ§Έ μ΄λ°₯μ μΆκ°ν΄ μ£Όλ©΄ λλ€.
μ΄λ°μμΌλ‘ nλ²μ§Έ μ΄λ°₯λΆν° kλ² μ°μν΄μ λ¨Ήλ κ²½μ°κΉμ§ λ°λ³΅ν΄μ£Όκ³ μ΅λλ‘ λ¨Ήμ μ μλ μ΄λ°₯μ μ’ λ₯μ κ°μλ₯Ό μΆλ ₯νλ€
μ½λ
// μ²μλΆν° kκ°κΉμ§ μ°μμΌλ‘ λ¨Ήμ
selected[sushi[0]] = 1;
int cnt = 1; // μ΄λ°₯ μ’
λ₯
int end = 0; // λ§μ§λ§μΌλ‘ λ¨Ήμ μ΄λ°₯ μΈλ±μ€ μ μ₯νκΈ° μν λ³μ
for (int next = 1, tmp = 1; tmp < k; next++, tmp++) {
if (next == n) next = 0; // λ€μ μ²μμΌλ‘ λμκ°
if (selected[sushi[next]++] == 0) // μ²μμΌλ‘ λ¨Ήλ μ΄λ°₯μ΄λΌλ©΄
cnt++;
end = next; // λ§μ§λ§ μΈλ±μ€ μ μ₯
}
// μλΉμ€ μ΄λ°₯ λ¨ΉκΈ°
if(selected[c]++ == 0) cnt++;
ans = cnt; // νμ¬κΉμ§ λ¨Ήμ μ΄λ°₯ κ°μ
for (int i = 1; i < n; i++) {
if(--selected[sushi[i-1]]==0) cnt--; // i-1λ²μ§Έ μ΄λ°₯μ λ¨Ήμ§ μμ
if(++end == n) end= 0; // νμ μ΄λ°₯ μν
if(selected[sushi[end]]++ == 0) { // μ²μ λ¨Ήλ μ΄λ°₯μ΄λΌλ©΄
cnt++;
}
if(cnt > ans) ans = cnt; // μ΄λ°₯ μ’
λ₯ κ°μ μ μ₯
}